【问题标题】:Support additional mime types in hapi支持 hapi 中的其他 mime 类型
【发布时间】:2016-04-10 23:12:54
【问题描述】:

我正在开发一个基于 hapi 的 graphql + relay 应用程序,并希望支持对带有 application/graphql mime 类型的 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"}

除了一些简洁的文档here之外,我没有看到在我的 hapi 服务器选项中有任何明确的 mime 类型配置的地方。

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

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

这里有没有人有这种hapi经验?

【问题讨论】:

  • 不确定这是否有用,但在此示例中 (github.com/SimonDegraeve/hapi-graphql/blob/master/src/index.js),作者创建了一个新的处理程序来检查 mime 类型。
  • 当然......我实际上已经为我的 hapi 服务器移植(修改)了这段代码,并且它在大多数情况下都可以正常工作。我们在这里 (github.com/SimonDegraeve/hapi-graphql/blob/master/src/…) 看到作者正在检查 mime 类型(我也是如此)。但我遇到的问题是我看不到在哪里/如何注册这种额外的非标准 mime 类型。我的带有 application/graphql 类型的 cURL(上图)甚至无法通过 parsePayload() 函数。早在此之前,它就被抛出 415 错误。
  • 您还有这个问题吗?那应该可以。
  • 我没有任何直接问题,因为我了解到我的中继前端正在发出标准 mime 类型的请求。在某些时候,我仍然想教 hapi 接受非标准类型,但这对我来说不是问题,现在。

标签: mime-types content-type hapijs graphql


【解决方案1】:

每条路由都有一个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)
  }
})

【讨论】:

    猜你喜欢
    • 2020-03-20
    • 2012-05-29
    • 2019-08-06
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    相关资源
    最近更新 更多