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

使用Postman发送POST请求时出现TypeError:无法解构req.body

解决Postman发送POST请求时req.body undefined的问题

问题详情

发送POST请求到http://localhost:6000/api/v1/users/register时,终端和Postman均报错:

TypeError: Cannot destructure property 'fullName' of 'req.body' as it is undefined

打印req.body结果为undefined。

相关代码片段

app.js(中间件配置)

import express from "express"
import cors from "cors"
import cookieParser from "cookie-parser"

const app = express()

app.use(cors({
    origin: process.env.CORS_ORIGIN,
    credentials: true
}))

app.use(express.json({limit: "16kb"}))
app.use(express.urlencoded({extended: true, limit: "16kb"}))
app.use(express.static("public"))
app.use(cookieParser())

//routes
import userRouter from './routes/user.routes.js'

app.use("/api/v1/users", userRouter)
export {app}

user.controller.js(请求处理逻辑)

import {asyncHandler} from '../utils/asyncHandler.js'

const registerUser = asyncHandler(async(req,res)=>{
     console.log("req.body:", req.body);
    const {fullName, email, username, password } = req.body
    console.log("email: ", email,
    "\n fullname: ",fullName,
    "\n username: ",username,
    "\n password: ",password);
})
export { registerUser}

asyncHandler.js(错误处理工具)

const asyncHandler = (requestHandler) =>{
    return (res,req,next) =>{
        Promise.resolve(requestHandler(req,res,next)).catch((err)=>next(err))
    }
}

export {asyncHandler}

Postman配置

请求方式:POST
请求地址:http://localhost:6000/api/v1/users/register
请求体内容:

{
    "fullName": "John Doe",
    "email": "john.doe@example.com",
    "password": "John",
    "username": "johndoe123"
}

问题根源及解决方案

1. 修复asyncHandler参数顺序错误

这是核心问题:asyncHandler返回的函数参数顺序写反了,应该是(req, res, next)而非(res, req, next)。参数顺序颠倒导致req和res传递错误,最终无法正确获取req.body。

修复后的asyncHandler.js:

const asyncHandler = (requestHandler) =>{
    return (req, res, next) =>{ // 修正参数顺序
        Promise.resolve(requestHandler(req,res,next)).catch((err)=>next(err))
    }
}

export {asyncHandler}

2. 确认Postman请求体格式

确保Postman中请求体选择raw格式,并设置为JSON(而非Text或其他格式),否则express.json()中间件无法解析请求体内容。

3. 验证中间件加载顺序

确认express.json()和express.urlencoded()中间件在路由挂载之前加载(当前app.js已正确配置,此步骤可作为二次验证)。

验证修复

重启后端服务后重新发送请求,此时req.body应能正确获取JSON数据,解构操作不再报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:32:46