首页 文章

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

提问于
浏览
1

我'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 回答

  • 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工作 .

相关问题