apollo-client服务器到服务器的突变导致错误(查询确定)

时间:2017-03-22 17:19:28

标签: javascript express graphql apollo apollo-server

我在我的网络服务器上使用apollo-client与我的graphql服务器(也是apollo)进行通信。我有一个成功的查询工作和正确检索数据,但当我尝试突变时,我收到new ApolloError消息。相同的突变复制/粘贴到graphiql中可以很好地工作。

我在我的graphql服务器上检查了CORS,它已启用且运行正常。我已经将我的变异从代码中复制并粘贴到我的graphiql编辑器中,它按预期工作。

有人可以为我阐明这一点,或者指导我如何在graphql-server上查看有关为什么我收到400错误的更多信息?

这是apollo错误

{
  "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)

****更新**** 我在我的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 个答案:

答案 0 :(得分:1)

<强> TL; DR

我解决了这个问题,这是因为我的update-token.graphql文件有一个不正确嵌套的返回属性===错误。

好的...所以我解决了这个问题。这是我的graphql变异中的一个愚蠢的错误。我试图得到一个在另一个领域内不存在的领域。

我已将我的查询复制并粘贴到graphiql中,工作正常!我忘记的是,我没有嵌套我的一个返回变量,这使得一切变得不同。我以为我已将我的更改粘贴回.graphql文件......但显然不是。

对此有什么兴趣是我最终弄清楚这个错误:

我尝试添加中间件来打印我的请求-------

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

它向我展示了很多东西,但是在比较来自graphiql和apollo-client的请求时没有任何东西跳出来(可能是因为实际的查询是一个字符串而且没有像json那样格式化)

然后我终于遇到了formatError,我能够打印出我的错误:

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文件并做了一个史诗般的facepalm,因为我看到突变按照预期通过apollo-client工作。