【问题标题】:Send POST request to apollo server with "operationName" and "variables"使用“operationName”和“variables”向 apollo 服务器发送 POST 请求
【发布时间】:2018-09-29 12:09:48
【问题描述】:

我关注这个文档 https://www.apollographql.com/docs/apollo-server/requests.html#postRequests 并尝试向 apollo 服务器发送 POST 请求。

测试代码:

it('should get author correctly', () => {
    const body = {
      query: `
        query {
          getAuthor($id: Int!) {
            name
          }
        }
      `,
      // operationName: 'query author',
      variables: {
        id: 1
      }
    };
    return rp.post(body).then(res => {
      expect(res.data.getAuthor.name).to.equal('lin');
    });
  });

rp.js

const requestPromise = require('request-promise');
const { PORT } = require('./config');

const GRAPHQL_ENDPOINT = `http://localhost:${PORT}/graphql`;

function rp(options) {
  function post(body) {
    return requestPromise(GRAPHQL_ENDPOINT, {
      method: 'POST',
      body,
      json: true,
      headers: {
        'Content-Type': 'application/json'
      }
    });
  }

  return {
    post
  };
}

module.exports = rp;

当我运行npm test 命令时,出现错误:

graphql test suites
Go to http://localhost:3000/graphiql to run queries!
    ✓ t0
    1) should get author correctly


  1 passing (79ms)
  1 failing

  1) graphql test suites
       should get author correctly:
     StatusCodeError: 400 - {"errors":[{"message":"Syntax Error: Expected Name, found $","locations":[{"line":3,"column":21}]}]}
      at new StatusCodeError (node_modules/request-promise-core/lib/errors.js:32:15)
      at Request.plumbing.callback (node_modules/request-promise-core/lib/plumbing.js:104:33)
      at Request.RP$callback [as _callback] (node_modules/request-promise-core/lib/plumbing.js:46:31)
      at Request.self.callback (node_modules/request/request.js:186:22)
      at Request.<anonymous> (node_modules/request/request.js:1163:10)
      at IncomingMessage.<anonymous> (node_modules/request/request.js:1085:12)
      at endReadableNT (_stream_readable.js:1106:12)
      at process._tickCallback (internal/process/next_tick.js:178:19)

【问题讨论】:

    标签: graphql apollo graphql-js apollo-server


    【解决方案1】:

    您的查询格式无效。其实有两点不对。一,变量定义在操作的最顶部(在querymutation 关键字旁边)。而且,第二,如果你定义了一个变量,你就必须使用它。所以你的查询应该看起来更像这样:

    query($id: Int!) {
      getAuthor(id: $id) {
        name
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-12
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-03
      • 1970-01-01
      相关资源
      最近更新 更多