使用“operationName”和“variables”向apollo服务器发送POST请求

时间:2018-04-19 05:36:15

标签: graphql apollo graphql-js apollo-server

我按照此文档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)

1 个答案:

答案 0 :(得分:2)

您的查询格式无效。实际上有两件事是错的。一,变量在操作的最顶部定义(在querymutation关键字旁边)。而且,如果你定义一个变量,你必须使用它。所以你的查询看起来应该更像这样:

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