在 Fastify addContentTypeParser 中使用默认 JSON 解析器

Use default JSON parser in Fastify addContentTypeParser

美好的一天,

请帮助实现 fastify 默认解析器。

我需要的是在每个请求上分配 JSON-body 解析器,而不考虑 content-type header

目前,我已经用那个丑陋的解决方法完成了它:

const {kContentTypeParser} = require("fastify/lib/symbols")
const asJson = fastify[kContentTypeParser].customParsers["application/json"]
fastify.addContentTypeParser("*", asJson);

提前致谢

在 fastify <=v2.11 中,默认的内容类型解析器没有公开。

因为它应用了很多检查(比如原型中毒、内容长度等),所以在覆盖之前你应该小心。

您的目标可以通过添加一个挂钩来存档:

fastify.addHook('onRequest', (request, reply, done) => {
  const type = request.getHeader('content-type')
  if(!type || type.indexOf('json') < 0){
    // force json body parse
    request.headers['content-type'] = 'application/json'
  }
  done()
})