使用POST方法后表单无法提交,req.body返回undefined的问题排查
问题原因与解决方法
你遇到的req.body返回undefined的核心问题是:Express 默认不会自动解析表单提交的请求体数据,必须手动添加对应的解析中间件。
具体修复步骤
1. 在app.js中添加表单解析中间件
在const app = express()之后、路由定义之前,加入以下代码:
// 解析 application/x-www-form-urlencoded 格式的表单数据 app.use(express.urlencoded({ extended: true }));
express.urlencoded()专门处理表单默认提交的编码格式,extended: true支持解析嵌套的表单数据结构。
2. (可选但推荐)显式设置按钮类型为submit
虽然大部分浏览器会默认把button当作提交按钮,但显式声明type="submit"可以避免兼容性问题:
<button type="submit">Post content</button>
修复后的完整app.js片段
const express = require("express") const app = express() const mongoose = require("mongoose") const Schema = mongoose.Schema; // 新增:添加表单解析中间件 app.use(express.urlencoded({ extended: true })); const BlogPost = new Schema({ title:{ type: String, required: true }, content: { type: String, required: true }, body: { type: String, required: true } }) const Blog = mongoose.model("Blog", BlogPost) module.exports = Blog; app.post("/blogs", (req, res) => { // 现在可以正常获取req.body了 console.log(req.body); const blogs = new Blog({ title:req.body.title, content: req.body.content, body: req.body.body, }) blogs.save() .then(result => { console.log(result); // 建议添加重定向或响应,避免客户端一直处于等待状态 res.redirect("/blogs"); }) .catch(err => { console.log(err); res.status(500).send("提交失败"); }) })
额外提示:提交成功或失败后,最好给客户端一个明确响应(比如重定向或错误提示),避免浏览器长期处于请求挂起状态。
内容的提问来源于stack exchange,提问作者Emmanuel uzoezie
相关产品推荐
相关产品推荐

