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

body-parser无法正常工作求助(附Express示例代码)

解决Express中请求体解析失败的问题

哈哈,这个坑我刚入门Express的时候也踩过!你的问题其实就出在两个小细节上,说穿了特别简单——中间件的加载顺序,还有一个Express版本的小知识点。

原代码的问题分析

先看你原来的代码结构:

// 先定义了路由
app.post("/api/login", (req, res) => {
  if (!req.body) return res.sendStatus(400);
  res.send("welcome, " + req.body.username);
});
// 才加载JSON解析中间件
app.use(express.json());
app.use(bodyParser.json());

Express的中间件是按照注册顺序依次执行的,当请求打到/api/login路由时,解析JSON的中间件还没被触发,所以req.body还是undefined,直接触发了!req.body的判断,返回400状态码。

另外还有个冗余点:你同时用了express.json()和bodyParser.json(),其实从Express 4.16.0开始,express.json()就是bodyParser.json()的内置封装,完全可以替代它,不需要再单独安装和引入body-parser包了。

修正后的代码

把解析中间件放在所有路由之前,并且去掉多余的依赖:

"use strict";
const PORT = 3000;
const express = require("express");
const app = express();

// 先加载JSON解析中间件,确保所有请求都先完成请求体解析
app.use(express.json());

// 再定义业务路由
app.post("/api/login", (req, res) => {
  if (!req.body) return res.sendStatus(400);
  res.send("welcome, " + req.body.username);
});

console.log(`Listen on port ${PORT}`);
app.listen(PORT);

测试验证

现在重新运行你的测试命令:
curl -H "Content-Type: application/json" -X POST -d '{"username":"xyz","password":"xyz"}' http://localhost:3000/api/login
就能正常返回welcome, xyz啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:36:03