Node.js+Express使用body-parser获取用户输入失败求助
排查Express中req.body打印为空的问题
嘿,我来帮你搞定这个问题!从你贴的后端代码来看,整体配置是没问题的,但req.body打印为空大概率是前端表单的设置有疏漏,下面是几个最常见的排查点:
确保表单使用POST请求方式
如果你的前端表单用的是method="GET",用户输入的数据会被挂载到req.query上,而不是req.body里。一定要把表单的method设置成POST:<form method="POST" action="/">给所有输入框添加name属性
body-parser(或者Express内置的urlencoded解析器)是通过输入框的name属性来识别并解析数据的。如果你的输入框没有设置name,后端根本拿不到对应的值。比如:<input type="number" name="firstNumber" placeholder="输入第一个数"> <input type="number" name="secondNumber" placeholder="输入第二个数">确认表单的action路径正确
如果表单的action属性指向了其他路径(比如action="/calculate"),那请求会发送到未定义的路由,你的根路径POST处理器自然接收不到数据。保持action为根路径"/"就好。
给你一个可用的前端示例(index.html)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>计算器</title> </head> <body> <form action="/" method="POST"> <label>第一个数:</label> <input type="number" name="num1" required> <br> <label>第二个数:</label> <input type="number" name="num2" required> <br> <button type="submit">提交计算</button> </form> </body> </html>
另外补充一点:从Express 4.16.0版本开始,框架已经内置了urlencoded解析功能,你可以不用单独安装body-parser,直接替换成:
app.use(express.urlencoded({ extended: true }));
这不会影响你的功能,但能少装一个依赖~
按照上面的步骤检查后,重启服务器再测试,应该就能在控制台看到req.body的内容啦!
内容的提问来源于stack exchange,提问作者MayBeNextT1me
相关产品推荐
相关产品推荐

