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

Postman发送text/plain格式请求体后后端控制器取不到内容如何解决

问题原因

NestJS 默认内置的请求体解析器仅支持 application/json、application/x-www-form-urlencoded、multipart/form-data 三种常见请求类型,默认不会解析 text/plain 类型的请求体,所以你拿到的 req.body 和 @Body() 都会是空值。

解决方案

方案1:全局启用 text/plain 解析(适合大多数场景)

如果你用的是 Express 底层(NestJS 默认底层)

修改项目的 main.ts 文件,添加 Express 自带的 text 解析中间件:

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import * as express from 'express';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  // 新增这一行,开启text/plain类型的请求体解析
  app.use(express.text({ type: 'text/plain' }));
  await app.listen(3000);
}
bootstrap();

如果你用的是 Fastify 底层

修改 main.ts 新增 text/plain 类型解析规则:

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { FastifyAdapter, NestFastifyApplication } from '@nestjs/platform-fastify';

async function bootstrap() {
  const app = await NestFactory.create<NestFastifyApplication>(
    AppModule,
    new FastifyAdapter()
  );
  // 新增text/plain类型解析
  const fastifyInstance = app.getHttpAdapter().getInstance();
  fastifyInstance.addContentTypeParser('text/plain', { parseAs: 'string' }, (req, body, done) => {
    done(null, body.toString());
  });
  await app.listen(3000);
}
bootstrap();

配置完成后,控制器里的 @Body() 就可以直接拿到完整的 text 格式请求体字符串,如果你需要把请求体转成对象,可以自行调用 JSON.parse() 处理:

async testFunction(@Body() body: string) {
  // body就是请求体的完整字符串
  const data = JSON.parse(`{${body}}`); // 注意你当前发的请求体外层缺大括号,合法JSON需要补全
  console.log(data);
}

方案2:仅指定路由启用解析(不需要全局生效)

如果你不想全局开启 text 解析,可以自定义中间件,仅绑定到需要接收 text/plain 请求的路由上即可,逻辑和全局配置一致,仅作用范围限定到指定路由。

注意事项

你当前在 Postman 里发送的请求体不是合法的 JSON 格式,外层缺少大括号包裹,如果实际业务传输的是 JSON 内容,更推荐直接使用 content-type: application/json 类型,不需要额外配置解析规则,NestJS 会自动转成对象返回给 @Body()。


内容的提问来源于stack exchange,提问作者Tushar Roy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:18:00