2

我正在尝试集成 Sangria 中间件以在我的应用程序中记录慢速 GraphQL 查询,但得到以下编译

错误:

类型不匹配;
找到:sangria.schema.Schema[models.UserRepo,Unit]
需要:sangria.schema.Schema[Any,Unit]
注意:models.UserRepo <:Any,但类 Schema 在 Ctx 类型中是不变的

您可能希望将 Ctx 定义为 +Ctx。(SLS 4.5)
涉及默认参数的应用程序发生错误。

代码片段:

val Query = ObjectType("Query", List[Field[UserRepo, Unit]]
(Field("store", StoreType, resolve = _ ⇒ ()) ))

val schema = Schema(Query, Some(MutationType))

val logResult = Executor.execute(SchemaDefinition.schema,
  query.asInstanceOf[Document], middleware = SlowLog(newlogger,
  threshold = 10 seconds) :: Nil)

这是参考链接:https ://github.com/sangria-graphql/sangria-slowlog

请帮助我知道什么是正确的签名Executor.execute(​​​????)

谢谢!

4

1 回答 1

1

我认为主要问题是您已经根据 定义了架构UserRepo,但您没有在执行时提供它。我想添加一个userContext参数应该可以解决这个问题:

Executor.execute(SchemaDefinition.schema, query,
  userContext = new UserRepo,
  middleware = SlowLog(newlogger, threshold = 10 seconds) :: Nil)

我还做了这个测试来检查类型(这些类型与您的场景相似),但它编译得很好:

val schema: Schema[Repo, Unit] = ???
val md: Middleware[Any] = ???

Executor.execute(schema, query, new Repo, middleware = md :: Nil)

如果它仍然无法编译,我建议您提供完整的自包含示例来重现该问题。(例如,在您的示例中,您没有显示 的​​类型MutationType

于 2017-08-23T22:46:17.140 回答