Node.js简易程序无法获取表单数据的问题求助
问题解决方法
你的代码存在两个核心问题,导致unbuffered变量没有输出:
1. 打印时机错误
req.on("data")是异步触发的,你在它外部直接打印unbuffered时,请求数据还没开始接收,变量自然是空值。必须把打印逻辑放到req.on("end")回调里,这个事件触发时才代表所有请求数据接收完成。
2. Express未配置表单解析中间件
你的表单提交的是application/x-www-form-urlencoded格式的数据,Express默认不会解析这类请求体,导致data事件根本不会被触发。需要添加express.urlencoded()中间件来处理该格式的请求。
修改后的服务器代码
var express = require("express"); var app = express(); // 添加表单解析中间件,处理x-www-form-urlencoded格式数据 app.use(express.urlencoded({ extended: true })); app.get("/", function(req,res){ res.sendFile(__dirname + "/index.html") }) app.post("/test", function(req, res){ console.log("testing") var unbuffered = ""; req.on("data", function(data) { unbuffered += data }) req.on("end", function() { console.log(unbuffered); // 将打印逻辑移到end事件内 console.log("done") // 额外补充:使用中间件后,可直接通过req.body获取解析后的结构化数据 console.log("解析后的表单数据:", req.body); }) }) app.listen(3000);
简化写法说明
如果使用了express.urlencoded()中间件,其实不需要手动监听data和end事件,直接通过req.body就能拿到解析后的表单字段值,代码会更简洁:
app.post("/test", function(req, res){ console.log("testing") console.log("名字:", req.body.firstname); console.log("姓氏:", req.body.lastname); console.log("done") })
内容的提问来源于stack exchange,提问作者DennisM
相关产品推荐
相关产品推荐

