如何使用Express从表单进行POST时获取参数?

时间:2016-12-28 14:41:08

标签: node.js express

我在Express中使用表单时遇到POSTed数据时出现问题。

我的表格很简单:

<form action="/api/v1/items" method="post">
    <p>
        <span>Name:</span><br>
        <input type="text" id="name">
    </p>
    <p>
        <span>Priority:</span><br>
        <input type="text" id="priority">
    </p>
    <p>
        <span>Comment:</span><br>
        <input type="text" id="comment">
    </p>
    <input type="submit" value="Add Item">
</form>

以下是服务器上端点的实现:

const express = require('express');

const router = express.Router();

router.post('/', (req, res, next) => {
    const data = {
        'name': req.body.name,
        'priority': parseInt(req.body.priority),
        'comment': req.body.comment
    };

    // do something with the data
});

module.exports = router;

路线应正确注册:

var app = express();
var items = require('./routes/items');

app.use('/api/v1/items', items);

问题在于,提交表单时,req.body没有参数。

我使用Express生成器创建了我的应用程序,因此应该正确设置body-parser中间件:

var bodyParser = require('body-parser');

...

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

奇怪的是,如果我使用curl来发布数据,则会正确发送参数:

curl --data "name=Something&priority=1&comment=Whatever" http://127.0.0.1:3000/api/v1/items

由于curl有效,这告诉我表单有问题,虽然我不知道那里有什么问题。

我需要做什么才能让表格中的POST参数在Express中正确解析?

1 个答案:

答案 0 :(得分:2)

表单中的输入应该是name而不是id s

<form action="/api/v1/items" method="post">
    <p>
        <span>Name:</span><br>
        <input type="text" name="name">
    </p>
    <p>
        <span>Priority:</span><br>
        <input type="text" name="priority">
    </p>
    <p>
        <span>Comment:</span><br>
        <input type="text" name="comment">
    </p>
    <input type="submit" value="Add Item">
</form>

您可能会发现specification on form submission有用。