Express中req.body.[name]返回undefined问题求助
解决req.body返回undefined的问题
嘿,我来帮你理清这个问题!其实你的body-parser配置是没问题的,问题出在请求方法和参数获取方式不匹配上,跟中间件没生效没关系~
核心原因:GET请求的参数不在req.body里
当表单用method="GET"提交时,浏览器会把输入的参数拼在URL的查询字符串(query string)里,比如/your-route?your-name=xxx,而不是放在请求体(request body)中。body-parser中间件是用来解析POST/PUT这类带请求体的请求的,所以GET请求下req.body自然就是undefined。
两种修正方案
方案1:保持GET请求,改用req.query获取参数
你的表单代码不用改,只需要把路由里的req.body换成req.query就行:
// 路由处理修改为 app.get("/[route]", function(req, res){ console.log(req.query.[name]); // 用req.query获取GET参数 });
方案2:改成POST请求,继续用req.body
如果你确实想通过req.body获取参数,需要把表单的请求方法改成POST,同时调整路由为POST类型:
- 修改表单代码:
<form action="/[route]" method="POST"> <!-- method改为POST --> <input type="text" name="[name]"> <input type="submit" value="Show Results"> </form>
- 修改路由处理:
// 把app.get改成app.post app.post("/[route]", function(req, res){ console.log(req.body.[name]); // 现在就能正常拿到参数了 });
额外说明
你的body-parser配置app.use(bodyParser.urlencoded({extended: true}));是完全正确的,它能解析POST请求中x-www-form-urlencoded格式的表单数据,这也是浏览器默认的表单提交格式。
内容的提问来源于stack exchange,提问作者Logi
相关产品推荐
相关产品推荐

