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

Node.js/Express中req.body始终为空排查(已安装body-parser)

问题描述

尝试获取HTML输入框中用户输入的文本并将其推入数组,但请求体(req.body)始终为空。已尝试调整代码顺序但无济于事,附上app.js、routes/game.js及EJS模板代码,请问问题出在哪里?

app.js 文件

const path = require('path');

const express = require('express');
const bodyParser = require('body-parser');

const gameRouter = require('./routes/game.js');
const siteRouter = require('./routes/site.js');

const app = express();

app.set('view engine', 'ejs');
app.set('views', 'views');

app.use(bodyParser.urlencoded({extended: false}));
app.use(express.static(path.join(__dirname, 'public')));

app.use('/game', gameRouter);
app.use('/', siteRouter);

app.listen(3000);

routes/game.js 文件

const express = require('express');

const router = express.Router();

const games = [];

router.get('/game', (req, res, next) => {

});

router.post('/create', (req, res, next) => {
    console.log(req.body);
    games.push({game: req.body.game})
    res.redirect('/');
})

module.exports = router;

EJS 模板文件

<%- include('./includes/head.ejs') %>
</head>
<body>
    <%- include('./includes/nav.ejs') %>
    <h1>Create a new Game</h1>
    
    <main>
        <form action="/game/create" method="POST">
            <div>
                <input type="text" id="game">
                <button type="submit">start</button>
            </div>
        </form>
    </main>
<%- include('./includes/end.ejs') %>
问题原因与解决办法

核心问题是HTML输入框缺少name属性:

  • 表单提交数据时,只有带有name属性的表单字段才会被浏览器包含到请求体中;
  • body-parser依赖字段的name属性解析生成req.body的键值对,仅设置id属性无法被识别。

修改EJS模板中的输入框,添加name="game"属性即可解决:

<input type="text" id="game" name="game">

修改后再次提交表单,req.body.game就能正确获取用户输入的文本,req.body也不会为空。

内容的提问来源于stack exchange,提问作者NickAutomatic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:15:40