Express项目前端表单提交req.body为空,Postman提交正常的问题排查
问题原因及解决方案:表单输入控件缺少
name属性 嘿,我一眼就发现问题所在了——你的HTML表单里的所有输入控件都没有添加name属性!
为什么会出现这个情况?
浏览器提交HTML表单时,只有带有name属性的表单控件数据才会被包含在请求体中。你用Postman测试能正常工作,是因为你手动指定了键值对(相当于给每个字段设置了name);但你的Handlebars模板里,<input>标签只设置了id,没有name,导致浏览器根本没把这些字段的数据发送到服务器,所以req.body始终为空。
怎么解决?
只需要给每个<input>标签添加和id同名的name属性即可,具体修改如下:
修改views/adminAdd.hbs中的表单控件:
<!-- First Name 输入框 --> <input id="firstname" name="firstname" type="text" class="validate" required> <!-- Last Name 输入框 --> <input id="lastname" name="lastname" type="text" class="validate" required> <!-- Email 输入框 --> <input id="email" name="email" type="email" class="validate" required> <!-- Password 输入框 --> <input id="password" name="password" type="password" class="validate" minlength="6" required>
关于body-parser的配置
你的body-parser配置是完全正确的:
app.use(bodyParser.urlencoded({ extended: false }));
这个中间件专门用来解析application/x-www-form-urlencoded格式的表单数据(也就是你表单指定的编码类型),所以不需要额外添加其他配置。
修改完成后,再通过浏览器提交表单,req.body就能正常获取到各个字段的值,用户也会被成功添加到MongoDB数据库中。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

