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

Nest.js接收表单数据时Body为空问题排查求助

问题原因与解决办法

核心原因

Nest.js 默认不会自动解析 application/x-www-form-urlencoded 格式的请求体,需显式配置对应解析中间件;同时,使用 @Res({ passthrough: true }) 手动处理响应时,可能干扰框架默认的请求体解析流程,二者结合导致 form 对象为空。

具体解决步骤

1. 配置 urlencoded 解析中间件

在应用入口文件(通常是 main.ts)中添加 Express 的 urlencoded 解析中间件:

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

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  // 启用urlencoded解析,extended: true支持复杂结构的表单数据
  app.use(express.urlencoded({ extended: true }));
  await app.listen(4000);
}
bootstrap();

2. 改用 Nest 规范的响应方式(推荐)

放弃手动调用 response.json(),直接返回对象让框架自动处理响应,避免解析冲突:

@Post('/temp')
async asdf(
  @Body() form: Record<string, string>,
) {
  this.logger.debug(JSON.stringify(form));
  return { ok: true, form };
}

3. 确认请求头正确性

确保请求的 Content-Type 严格为 application/x-www-form-urlencoded,curl 请求或浏览器表单提交时不要拼写错误。

其他接口正常的原因

其他接口大概率接收的是 application/json 格式请求体,Nest 默认配置了 express.json() 中间件,因此能正常解析;而当前接口使用表单格式却未配置对应解析器,导致请求体无法被解析为对象。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 01:57:02