Express POST接收表单数据时req.body为空对象问题排查
问题根因
和你配置的express.urlencoded、body-parser中间件无关,问题出在表单代码上:
- 标准表单提交时,只有配置了有效
name属性的输入控件,才会被序列化后加入请求体 - 你当前的两个输入框:第一个
name属性值为空字符串,第二个完全没有写name属性,提交时不会携带任何表单字段,后端自然只能拿到空对象{}。
修复方案
给两个输入框添加对应业务含义的name属性即可,修改后的表单核心代码:
<form method="post" action="/new"> <input placeholder="Insert your name here" type="text" name="user" id=""> <input placeholder="Insert your message here" type="text" name="text"> <button type="submit">Submit</button> </form>
这里的name值直接对应了你路由里messages数组的字段名(user、text),后续你可以直接把提交的数据push到数组里,不需要额外做字段名映射。
修改后重启服务提交表单,req.body就能正常获取到提交的内容了。
排查提示:这类
req.body为空的问题,如果已经确认urlencoded/json解析中间件配置正确、挂载顺序在路由之前,优先检查三点:表单控件有没有加有效name属性、前端发请求时有没有把参数正确放进请求体、请求头的Content-Type是否和使用的解析中间件匹配。
内容的提问来源于stack exchange,提问作者leo___
相关产品推荐
相关产品推荐

