app.post()无法注册POST请求:Express后端接收表单数据失败求助
问题排查与修复方案
核心问题:Express路由未关联到HTTP/2服务器
你创建了Express实例app并定义了app.post('/Joining')路由,但同时单独启动了一个独立的HTTP/2服务器server。浏览器发送的POST请求被HTTP/2服务器的stream事件处理器直接接管,返回了public/joining.html,根本没进入Express的路由逻辑。
修复方法
把Express挂载到HTTP/2服务器上,替换掉手动处理stream的代码:
// 删除原来整个server.on("stream", ...)代码块 // 改用Express处理所有HTTP/2请求 server.on('request', app);
字段名大小写不匹配
- HTML表单中房间码输入框的
name属性是roomCode(小写r开头) - 后端代码里用
req.body.RoomCode(大写R开头),导致无法获取对应值
修复方法
统一字段命名,后端代码改为:
var UserName = req.body.UserName; var RoomCode = req.body.roomCode;
数据库字段名不匹配
- 你创建的表结构是
CREATE TABLE IF NOT EXISTS emp(UserName TEXT, roomCode TEXT),字段为roomCode - 但插入语句里用了
RoomCode(大写R),甚至相关片段里误用了不存在的GameCode字段
修复方法
统一数据库字段名,修正插入语句:
db.run('INSERT INTO emp(UserName, roomCode) VALUES(?,?)', [req.body.UserName, req.body.roomCode], function(err) { if (err) { return console.log(err.message); } console.log("New user has been added"); res.send(`New user has been added into the database with code = ${req.body.roomCode} and Name = ${req.body.UserName}`); });
额外响应错误
响应文本里的req.body.GameCode是不存在的字段,需改为req.body.roomCode,上述修复已包含此修正。
修复后关键代码片段
// 替换原HTTP/2服务器的stream处理逻辑 server.on('request', app); server.listen(webport, () => { console.log(`HTTP/2 server started on port ${webport}`); }); // 修正后的POST路由 app.post('/Joining', (req, res) => { const UserName = req.body.UserName; const RoomCode = req.body.roomCode; db.serialize(()=>{ db.run('INSERT INTO emp(UserName, roomCode) VALUES(?,?)', [UserName, RoomCode], function(err) { if (err) { return console.log(err.message); } console.log("New user has been added"); res.send(`New user has been added into the database with code = ${RoomCode} and Name = ${UserName}`); }); console.log(` ${UserName}`) console.log(` ${RoomCode}`) }); });
内容的提问来源于stack exchange,提问作者FoolFl1ckz
相关产品推荐
相关产品推荐

