什么是Sangria中间件中Executor.execute(????)的正确签名,用于记录慢速GraphQL查询?

时间:2017-08-23 06:48:22

标签: scala graphql sangria

我正在尝试集成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(​​​????)

的正确签名是什么

谢谢!

1 个答案:

答案 0 :(得分: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的类型)