我'm using apollo-client on my web server to communicate with my graphql server (also apollo). i have a successful query working and retrieving data properly, but when i attempt a mutation, i'得到 new ApolloError
消息 . 相同的突变复制/粘贴到graphiql完美的工作 .
我已经检查了我的graphql服务器上的CORS,它已启用并正常运行 . 我已经将我的变异从代码中复制并粘贴到我的graphiql编辑器中,它按预期工作 .
有人可以为我阐明这一点,或指导我如何在我的graphql-server上看到有关为什么我收到 400
错误的更多信息?
这是阿波罗错误
{
"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 ****我在我的 apolloMiddleware
之前添加了中间件到console.log 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"
}
我正在从我的网络服务器调用 client.mutate({ ... })
,但是在 req.body
这里,我设置了这个:
req.body -------
{
"query": "mutation ..."
....
}
为什么 "query": "mutation ..."
而不是 "mutation": "mutation ..."
?
1 回答
TL;DR
我解决了这个问题,这是因为我的
update-token.graphql
文件有一个不正确嵌套的返回属性===错误 .好的...所以我解决了这个问题 . 这是我的graphql变异中的一个愚蠢的错误 . 我试图得到一个在另一个领域内不存在的领域 .
我已经将我的查询复制并粘贴到graphiql中,它工作得很好!我忘记的是,我没有嵌套我的一个返回变量,这使得一切变得不同 . 我以为我已将我的更改粘贴回
.graphql
文件......但显然不是 .什么是有趣的是我最终弄清楚这个错误:
我尝试添加中间件来打印我的请求-------
这给了我很多东西,但是当比较来自graphiql和apollo-client的请求时,没有任何东西跳出来(可能是因为实际的查询是一个字符串而且格式不像json)
然后我终于找到
formatError
,我能够打印出我的错误:这告诉我这个:
看到这条消息后,我立即更新了我的
.graphql
文件并做了一个史诗般的facepalm,因为我看到突变按照预期通过apollo-client工作 .