You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 13:02:01