为什么Node.js从POST请求中获取空体?

时间:2015-06-01 16:45:20

标签: node.js

当针对以下Node.js代码提交以下表单时,根本不会触发data事件;代码直接转到req.on('end', callback);

function addEvent(req, res) {
    "use strict";

    var body = '';

    req.setEncoding('utf8');
    req.on('data', function(chunk) {
        console.log('Got %d bytes of data', chunk.length);
        body += chunk;
    });
    req.on('end', function() {
        console.log('addEvent() request body: [%s]', body);
        var postData = qs.parse(body);
        dbInsertStmt.run(postData.name, postData.startDate, postData.startTime, postData.endTime, postData.anchor, postData.location, function() {
            serveFromDisk('public/admin.html', res);
        });
    });
}

表格

    <form action="../events" method="post" enctype="application/x-www-form-urlencoded">
        <div class="form-group">
            <label for="name">Nom</label>
            <input type="text" class="form-control" id="name" placeholder="Nom de l'événement">
        </div>
        ...
        <button type="submit" class="btn btn-primary">Additionner événment</button>
    </form>

我在日志中看到的内容

Incoming request: POST /events
addEvent() request body: []

知道请求正文为什么是空的?

1 个答案:

答案 0 :(得分:2)

表单的<input>标记缺少name属性。没有它们,浏览器根本不会发送字段。

修复:

<input type="text" class="form-control" id="name" name="name" placeholder="Nom de l'événement">

我从Bootstrap's examples复制表单HTML时感到很惊讶。