2017-08-23 2 views
1

私は自分のアプリケーションに遅いGraphQLクエリをログに記録するサングリアミドルウェアを統合しようとしているが、次のコンパイルSangriaミドルウェアのExecutor.execute(????)の適切なシグネチャとは何ですか?

エラー取得しています:

type mismatch;
found : sangria.schema.Schema[models.UserRepo,Unit]
required: sangria.schema.Schema[Any,Unit]
Note:models.UserRepo <:Any,but class Schema is invariant in type
Ctx.
You may wish to define Ctx as +Ctx instead. (SLS 4.5)
Error occurred in an application involving default arguments.

コードスニペット:ここ

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

の正当な署名が何であるかを教えてください

ありがとうございます!

答えて

0

主な問題は、スキーマを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) 

それでもコンパイルされない場合は、問題を再現する完全な自己包含の例を提供することをお勧めします。 てexecutor.execute(SchemaDefinition.schema、query.asInstanceOf [ドキュメント]、UserRepo.this、 ミドルウェア= SlowLog:私はこれを使用しています今

+0

(例えば、あなたの例では、あなたはMutationTypeの種類を示していません) (logger2、しきい値= 10秒)::無記号) – user8504370

+0

そして、ときに私は、クエリを実行します。私の端末は、これを取得するには、 : { "1999"){ 値 } } ストア{ ます(年を}コメント: Java.lang.ClassCastException:java.lang.Stringは、sangria.ast.Documentにキャストできません。 フォーマットは: val query = "gv()。( 'BaseVehicle'、 'YearID'、 '+ year +' ').out(' make ')。dedup()" – user8504370

+0

応答は { "データ":ヌル、 "エラー":[ { "メッセージ": "内部サーバーエラー"、 "パス":[ "店舗"、 は ]、 "場所"、 "作る":[ { "行":3、 "列":5 } ] } ] } 、文書に文字列をキャストする方法を私に提案したりしてくださいこの問題を解決するための他の解決策は、 ありがとう! – user8504370

関連する問題