Fastify服务器接收无Content-Length头POST请求报错,能否关闭校验?
解决Fastify禁用Content-Length校验的问题
可以禁用Fastify对入站请求的Content-Length校验,具体有两种常用实现方式:
1. 全局修改body解析器配置
通过自定义verify函数跳过Fastify默认的Content-Length与body非空校验,同时保留默认的JSON解析逻辑:
const fastify = require('fastify')({ bodyParser: { verify: (req, res, buf, encoding) => { // 空函数表示跳过默认校验,如需自定义校验逻辑可在此补充 } } })
2. 完全自定义body解析逻辑(适合高度定制场景)
关闭Fastify默认的body解析器,手动读取并解析请求体,完全掌控校验规则:
const fastify = require('fastify')({ bodyParser: false }) // 全局钩子中手动处理请求体解析 fastify.addHook('preHandler', async (req, res) => { if (req.method === 'POST' && req.headers['content-type']?.includes('application/json')) { let rawBody = '' // 流式读取请求体内容 for await (const chunk of req) { rawBody += chunk.toString() } // 解析JSON格式 try { req.body = JSON.parse(rawBody) } catch (err) { return res.status(400).send({ statusCode: 400, error: 'Invalid JSON format' }) } } }) // 示例路由 fastify.post('/your-endpoint', (req, res) => { res.send({ receivedBody: req.body }) })
注意:禁用默认校验后,需自行处理请求体为空、格式错误等异常场景,避免服务出现潜在问题。
内容的提问来源于stack exchange,提问作者user1862965
相关产品推荐
相关产品推荐

