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

如何在NestJS控制器中获取前端提交的form data表单数据

问题原因

NestJS 默认内置的 body 解析器仅支持 application/json 和 application/x-www-form-urlencoded 格式的请求,不会解析 multipart/form-data 类型的表单数据,因此直接用 @Body() 拿到的是空对象。

解决步骤
  1. 安装依赖
    NestJS 基于 multer 处理 form-data 格式数据,首先需要安装相关依赖:
# 安装multer核心库
npm install multer
# 安装multer的TS类型声明
npm install --save-dev @types/multer
  1. 控制器代码修改
    如果你的接口没有上传文件,仅包含普通表单字段,使用 NoFilesInterceptor 拦截器即可,修改后的代码如下:
import { Controller, Post, Body, UseInterceptors } from "@nestjs/common";
import { NoFilesInterceptor } from "@nestjs/platform-express";

@Controller()
export class AuthenticationController {

    constructor() { }

    @Post('public/login')
    @UseInterceptors(NoFilesInterceptor())
    login(@Body() body) {
        console.log(body); // 此时可正常打印 {login: 'sampleuser', password: 'userpassword'}
        return body;
    }
}
扩展场景

如果接口同时包含文件上传和普通表单字段,根据你的字段场景选择对应的拦截器即可,普通表单字段仍会自动挂载到 @Body() 中:

  • 单文件上传:使用 FileInterceptor('文件字段名')
  • 多指定字段文件上传:使用 FileFieldsInterceptor([{name: '字段1'}, {name: '字段2'}])
  • 任意文件上传:使用 AnyFilesInterceptor()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:15:03