POST请求处理失败

时间:2017-08-30 03:56:39

标签: javascript node.js

<form method="POST" action="/profile">
    <input name="name" type="text"><br/>
    <input name="password" type="password"><br/>
    <input type="submit">
</form>

我正在尝试使用此表单向node.js文件发送POST请求 为了处理请求,我在创建服务器后执行了以下操作:

if (request.method === 'POST') {
    var data = '', dataFull;
    request.on('data', function (chunk) {
        data += chunk;
    }).on('end', function () {
        dataFull = queryString.parse(data);
    });
    console.log(dataFull);
}

但是控制台只记录undefined而不是记录对象。 并尝试记录数据变量,但它没有记录任何内容

任何人都可以解释原因吗?

1 个答案:

答案 0 :(得分:1)

这是因为当您到达dataFull语句时,console.log(dataFull)变量未填充。您在dataend上绑定的回调是异步的,只有在发生受尊重的事件时才会触发。结帐this link以了解有关异步回调的更多信息(以及更多信息) 就代码而言,你可以做这样的事情,

if (request.method === 'POST') {
  let data = '';
  request.on('data', function (chunk) {
    data += chunk;

    // Too much POST data, kill the connection!
    // someone can kill node by uploading an endless file! 
    // 1e6 === 1 * Math.pow(10, 6) === 1 * 1000000 ~~~ 1MB
    if(data.length > 1e6){
      request.connection.destroy();
    }
  }).on('end', function () {
    let dataFull = queryString.parse(data);
    console.log(dataFull);
    //- now you can access the fields as dataFull['name'] etc.
    //- maybe call a callback or resolve a promise here
    //- cb(null, dataFull) or resolve(dataFull)
  });
}

P.S。来自this SO answer and it's comments

的身体核对示例