BodyParser导致所有API请求(含基础GET请求)挂起如何修复
问题原因
bodyParser.json是生成解析中间件的工厂函数,必须调用后才会返回符合Express规范的中间件实例。你当前代码直接将未执行的函数本身传入app.use(),该逻辑不会自动处理请求、也不会调用next()将控制权移交到后续路由,因此所有请求都会被卡住无响应。- 你的
/dataPOST路由存在笔误:将响应对象res错写为请求对象req,调用req.status()会抛出异常,该问题会在bodyParser问题修复后显现,需要同步修正。
修复方案
- 给
bodyParser.json添加括号,执行后拿到合法中间件传入app.use - 将POST路由中的
req.status修改为res.status
小提示:Express 4.16.0及以上版本已内置JSON请求体解析能力,无需额外安装
body-parser依赖,直接使用app.use(express.json())即可实现相同效果。
修复后完整代码
const express = require("express") const bodyParser = require("body-parser") const env = require("dotenv"); const app = express() env.config(); // 添加括号执行函数,拿到中间件实例 app.use(bodyParser.json()); app.get("/", (req, res) => { res.status(200).json({ message:"Hello World" }) }); app.post("/data", (req, res) => { // 将req替换为res res.status(200).json({ message: req.body }) }); app.listen(process.env.PORT, ()=>{ console.log(`Server listening at port ${process.env.PORT}`); })
内容的提问来源于stack exchange,提问作者Arcturus
相关产品推荐
相关产品推荐

