如何为使用Fastify的Nest项目添加自定义content-type解析器支持空请求体
解决Nest+Fastify下application/json空请求体抛出400错误的方案
错误原因
Fastify默认的application/json内容解析器禁止空请求体,收到空请求时会主动抛出FST_ERR_CTP_EMPTY_JSON_BODY错误。
解决方案
方案1:自定义内容解析器(全版本兼容)
直接在FastifyAdapter初始化时传入自定义的JSON解析规则,空请求体直接返回空对象即可:
import { FastifyAdapter, NestFastifyApplication } from '@nestjs/platform-fastify'; import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; async function bootstrap() { const fastifyAdapter = new FastifyAdapter({ addContentTypeParser: { 'application/json': (req, payload, done) => { let body = ''; payload.on('data', (chunk) => { body += chunk; }); payload.on('end', () => { // 空请求体直接返回空对象,不抛出错误 if (!body.trim()) return done(null, {}); try { const parsed = JSON.parse(body); done(null, parsed); } catch (err) { done(err); } }); } } }); const app = await NestFactory.create<NestFastifyApplication>(AppModule, fastifyAdapter); await app.listen(3000); } bootstrap();
方案2:使用Fastify内置参数(v4.10.0+版本支持)
如果你的项目依赖的Fastify版本高于等于v4.10.0,无需自定义解析器,直接开启内置的allowEmptyJsonBody配置即可:
const fastifyAdapter = new FastifyAdapter({ allowEmptyJsonBody: true });
内容的提问来源于stack exchange,提问作者mardok
相关产品推荐
相关产品推荐

