0

我正在开发一个基于 hapi 的 graphql + 中继应用程序,并希望支持对具有application/graphqlmime 类型的 graphql 端点的请求。

在这里,您可以看到我向 graphql 端点发送 POST 请求。

~> curl -X POST --header "Content-Type:application/json" -d '{"query":"{content(id:\"13381672\"){title,id}}"}' http://127.0.0.1:8000/graphql
{"data":{"content":{"title":"Example Title","id":"13381672"}}}

~> curl -X POST --header "Content-Type:application/graphql" -d '{"query":"{content(id:\"13381672\"){title,id}}"}' http://127.0.0.1:8000/graphql
{"statusCode":415,"error":"Unsupported Media Type"}

在我的 hapi 服务器选项中,除了此处的一些简洁文档之外,我没有看到任何地方有任何针对 mime 类型的显式配置。

我已经按照以下设置了一个选项 mime 配置,将选项传递到服务器实例化中,但我仍然看到"Unsupported Media Type"错误。

options.mime = {
  override: {
    'application/graphql': {
      charset: 'UTF-8',
      compressible: true,
      type: 'application/graphql'
    }
  }
};

这里有其他人有这种hapi经验吗?

4

1 回答 1

2

每条路由都有一个payload配置选项,它带有一个allow属性,让 hapi 知道哪些 mimetypes 允许该路由。如果您将其设置为application/graphql,并将parse选项设置为false,您的请求将起作用。

不幸的是,您必须自己解析有效负载。

这是一个示例路线:

server.route({
  method: ['POST', 'PUT'],
  path: '/graphql',
  config: {
    payload: {
      parse: false,
      allow: 'application/graphql'
    }
  },
  handler: function(request, reply) {
    reply(request.payload)
  }
})
于 2016-01-24T20:30:36.473 回答