You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 15:15:01