Express.js已配置解析中间件后req.body返回undefined怎么解决
问题原因排查
你遇到的req.body为undefined可从以下几个方向排查:
- 缺少express实例初始化:你贴出的代码里没有声明
const app = express();就直接使用了app变量,这会直接导致后续逻辑异常,如果是漏贴可以忽略该条。 - 中间件注册顺序错误:
app.use(express.json())和app.use(express.urlencoded({ extended: false }))必须注册在所有路由定义之前,如果你把这两行配置写在了app.post("/api/jokes")的后面,中间件不会对该路由生效,自然无法解析请求体。 - 请求头不匹配:请求的
Content-Type头必须和你使用的解析中间件对应:- 发送JSON格式请求体时,请求头
Content-Type必须为application/json,否则express.json()不会执行解析 - 发送表单格式请求体时,请求头
Content-Type必须为application/x-www-form-urlencoded,否则express.urlencoded()不会执行解析
- 发送JSON格式请求体时,请求头
- 请求方法错误:只有POST、PUT等携带请求体的请求方法才能解析到req.body,如果误使用GET方法调用该接口,默认不会传递请求体。
正确代码示例
const express = require("express"); const path = require("path"); const fs = require("fs"); const jokes = require("./jokes.json"); // 第一步:初始化express实例 const app = express(); // 第二步:注册解析中间件,必须放在路由前面 app.use(express.json()); app.use(express.urlencoded({ extended: false })); // 第三步:定义路由 app.post("/api/jokes", (req, res) => { const newJoke = { question: req.body.question, answer: req.body.answer }; console.log(req.body.question); res.json({ status: "success", data: newJoke }); }); const port = process.env.PORT || 5000; app.listen(port, () => { console.log(`Server is running and listening on port ${port}...`); });
内容的提问来源于stack exchange,提问作者user15499983
相关产品推荐
相关产品推荐

