2017-03-22 12 views
1

私のWebサーバーでgrapholサーバー(apolloとも)と通信するためにapollo-clientを使用しています。私は成功したクエリを動作させ、データを正しく取得していますが、私が突然変異を試みると、私はnew ApolloErrorメッセージを受け取ります。 graphiqlに貼り付けられた同じ突然変異コピーは完全に機能します。apollo-clientサーバーからサーバーへの突然変異によりエラーが発生しました(質問OK)

私は自分のgraphqlサーバでCORSをチェックしており、これが有効になっていて正しく機能しています。文字通り私の突然変異をコードからコピーしてグラフエディタに貼り付けて、期待通りに機能します。

誰かが私のためにこれについていくつかの光を当てることができますか、私は400エラーを取得している理由について私のgraphqlサーバーについての詳細情報をどのように見ることができますか?私はreq.headersとreq.body

req.headers ------- 
{ 
    "accept": "*/*", 
    "content-type": "application/json", 
    "authorization": "JWT ", 
    "accept-encoding": "gzip,deflate", 
    "user-agent": "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)", 
    "connection": "close", 
    "content-length": "585", 
    "host": "localhost:9000" 
} 

req.body ------- 
{ 
    "query": "mutation updateTwitterAccessToken($data: TokenInput!) {\n updateTwitterToken(data: $data) {\n _id\n services {\n  twitter {\n  id\n  __typename\n  }\n  token {\n  token\n  expires\n  __typename\n  }\n  __typename\n }\n __typename\n }\n}\n", 
    "variables": { 
    "data": { 
     "accessToken": "000700000-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 
     "accessTokenSecret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 
     "_id": "yyyyyyyyyyyyyyyyy", 
     "service": "twitter", 
     "serviceId": "000700000" 
    } 
    }, 
    "operationName": "updateTwitterAccessToken" 
} 
をCONSOLE.LOGために私 apolloMiddleware前にミドルウェアを追加ここ

はアポロエラー

{ 
    "graphQLErrors": [], 
    "networkError": { 
    "response": { 
     "url": "http://localhost:9000/api/private", 
     "status": 400, 
     "statusText": "Bad Request", 
     "headers": { 
     "_headers": { 
      "x-powered-by": [ 
      "Express" 
      ], 
      "access-control-allow-origin": [ 
      "*" 
      ], 
      "content-type": [ 
      "application/json" 
      ], 
      "date": [ 
      "Wed, 22 Mar 2017 05:36:21 GMT" 
      ], 
      "connection": [ 
      "close" 
      ], 
      "transfer-encoding": [ 
      "chunked" 
      ] 
     } 
     }, 
     "ok": false, 
     "body": { 
     "_readableState": { 
      "objectMode": false, 
      "highWaterMark": 16384, 
      "buffer": { 
      "head": { 
       "data": { 
       "type": "Buffer", 
       "data": [ 
        123, 
        34, 
        101, 
        114, 
        114, 
        111, 
        114, 
        115, 
        34, 
        58, 
        91, 
        123, 
        34, 
        109, 
        101, 
        115, 
        115, 
        97, 
        103, 
        101, 
        34, 
        58, 
        34, 
        67, 
        97, 
        110, 
        110, 
        111, 
        116, 
        32, 
        113, 
        117, 
        101, 
        114, 
        121, 
        32, 
        102, 
        105, 
        101, 
        108, 
        100, 
        32, 
        92, 
        34, 
        116, 
        111, 
        107, 
        101, 
        110, 
        92, 
        34, 
        32, 
        111, 
        110, 
        32, 
        116, 
        121, 
        112, 
        101, 
        32, 
        92, 
        34, 
        85, 
        115, 
        101, 
        114, 
        83, 
        101, 
        114, 
        118, 
        105, 
        99, 
        101, 
        115, 
        92, 
        34, 
        46, 
        34, 
        44, 
        34, 
        108, 
        111, 
        99, 
        97, 
        116, 
        105, 
        111, 
        110, 
        115, 
        34, 
        58, 
        91, 
        123, 
        34, 
        108, 
        105, 
        110, 
        101, 
        34, 
        58, 
        57, 
        44, 
        34, 
        99, 
        111, 
        108, 
        117, 
        109, 
        110, 
        34, 
        58, 
        55, 
        125, 
        93, 
        125, 
        93, 
        125 
       ] 
       }, 
       "next": null 
      }, 
      "tail": { 
       "data": { 
       "type": "Buffer", 
       "data": [ 
        123, 
        34, 
        101, 
        114, 
        114, 
        111, 
        114, 
        115, 
        34, 
        58, 
        91, 
        123, 
        34, 
        109, 
        101, 
        115, 
        115, 
        97, 
        103, 
        101, 
        34, 
        58, 
        34, 
        67, 
        97, 
        110, 
        110, 
        111, 
        116, 
        32, 
        113, 
        117, 
        101, 
        114, 
        121, 
        32, 
        102, 
        105, 
        101, 
        108, 
        100, 
        32, 
        92, 
        34, 
        116, 
        111, 
        107, 
        101, 
        110, 
        92, 
        34, 
        32, 
        111, 
        110, 
        32, 
        116, 
        121, 
        112, 
        101, 
        32, 
        92, 
        34, 
        85, 
        115, 
        101, 
        114, 
        83, 
        101, 
        114, 
        118, 
        105, 
        99, 
        101, 
        115, 
        92, 
        34, 
        46, 
        34, 
        44, 
        34, 
        108, 
        111, 
        99, 
        97, 
        116, 
        105, 
        111, 
        110, 
        115, 
        34, 
        58, 
        91, 
        123, 
        34, 
        108, 
        105, 
        110, 
        101, 
        34, 
        58, 
        57, 
        44, 
        34, 
        99, 
        111, 
        108, 
        117, 
        109, 
        110, 
        34, 
        58, 
        55, 
        125, 
        93, 
        125, 
        93, 
        125 
       ] 
       }, 
       "next": null 
      }, 
      "length": 1 
      }, 
      "length": 117, 
      "pipes": null, 
      "pipesCount": 0, 
      "flowing": null, 
      "ended": false, 
      "endEmitted": false, 
      "reading": true, 
      "sync": false, 
      "needReadable": true, 
      "emittedReadable": true, 
      "readableListening": false, 
      "resumeScheduled": false, 
      "defaultEncoding": "utf8", 
      "ranOut": false, 
      "awaitDrain": 0, 
      "readingMore": false, 
      "decoder": null, 
      "encoding": null 
     }, 
     "readable": true, 
     "domain": null, 
     "_events": {}, 
     "_eventsCount": 7, 
     "_writableState": { 
      "objectMode": false, 
      "highWaterMark": 16384, 
      "needDrain": false, 
      "ending": false, 
      "ended": false, 
      "finished": false, 
      "decodeStrings": true, 
      "defaultEncoding": "utf8", 
      "length": 0, 
      "writing": false, 
      "corked": 0, 
      "sync": false, 
      "bufferProcessing": false, 
      "writecb": null, 
      "writelen": 0, 
      "bufferedRequest": null, 
      "lastBufferedRequest": null, 
      "pendingcb": 0, 
      "prefinished": false, 
      "errorEmitted": false, 
      "bufferedRequestCount": 0, 
      "corkedRequestsFree": { 
      "next": null, 
      "entry": null 
      } 
     }, 
     "writable": true, 
     "allowHalfOpen": true, 
     "_transformState": { 
      "needTransform": true, 
      "transforming": false, 
      "writecb": null, 
      "writechunk": null, 
      "writeencoding": "buffer" 
     } 
     }, 
     "bodyUsed": false, 
     "size": 0, 
     "timeout": 0, 
     "_raw": [], 
     "_abort": false 
    } 
    }, 
    "message": "Network error: Network request failed with status 400 - \"Bad Request\"" 
} 
Error 
    at new ApolloError (/Users/rkstar/dev/projects/crate/microservices/dashboard/node_modules/apollo-client/apollo.umd.js:1490:23) 
    at /Users/rkstar/dev/projects/crate/microservices/dashboard/node_modules/apollo-client/apollo.umd.js:2149:24 
    at process._tickCallback (internal/process/next_tick.js:103:7) 

**** **** UPDATE です

私はウェブサーバーからclient.mutate({ ... })を呼び出していますが、req.bodyここでは、私はこれを設定しています:

なぜ"query": "mutation ..."で、"mutation": "mutation ..."ではないのですか?

答えて

1

TL; DR

は私が問題を解決して、私のupdate-token.graphqlファイルが戻りプロパティが不適切===エラーが入れ子になっていたので、それがでした。


OKAY ...この問題を解決しました。それは私のgraphql突然変異のばかげたエラーでした。私は別のフィールドの中に存在しなかったフィールドを取得しようとしていました。

私はそれが正常に動作したグラフの中に私のクエリをコピーして貼り付けました!私が忘れていたのは、すべての違いを生み出した私の帰ってきたヴァルスの入れ子になっていないものでした。私は私の変更を.graphqlファイルに貼り付けたと思っていたが、明らかにそうではなかった。これについて興味深い何

は私が最終的にこのエラーを考え出した方法です:

私は私の要求をプリントアウトするミドルウェアを追加しようとした-------

router.all('/private', 
    bodyParser.json(), 
    (req, res, next)=>{ 
    console.log(JSON.stringify(req.route, null, 2)) 
    next() 
    }, 
    apolloMiddleware 
) 

私に物事の多くを示しています、しかし、私のところから飛び出したものは、graphiqlと私は私のエラープリントアウト持っていることができた私は最終的にformatErrorに出くわしました、その後

(実際のクエリは、文字列と素敵なJSONのようにフォーマットされなかったため、おそらく)アポロ・クライアント:

const apolloMiddleware: any = graphqlExpress(request => ({ 
    debug: debugMode, 
    schema: executableSchema, 
    context: request, 
    formatError: e =>{ 
    console.log(JSON.stringify(e, null, 2)) 
    } 
})) 

をし、それがありました私にこの:このメッセージを見た後

{ 
    "message": "Cannot query field \"token\" on type \"UserServices\".", 
    "locations": [ 
    { 
     "line": 9, 
     "column": 7 
    } 
    ] 
} 

、私は即座に私の.graphqlファイルを更新し、アポロ・クライアントを経由して、予想通り、私は突然変異の仕事を見て、壮大な手のひらを顔に当てるをしました。

関連する問題