异步收集POST数据

时间:2016-04-11 15:49:13

标签: node.js

我在家里运行了一个基于node.js的网络服务器,我正在尝试实现一个登录表单。

所以基本上我需要访问POSTed数据(登录/密码)。我找到了这个 : How do you extract POST data in Node.js? (req.on('data'...)& req.on('end'...))

但我需要异步执行此操作,有人可以告诉我该怎么做吗? (我需要此代码阻止,而不是非阻塞)

编辑:我的所有代码都可以在Github上找到: https://github.com/Fointard/NodeJs/tree/authentication 问题出在这里:https://github.com/Fointard/NodeJs/blob/authentication/js/reqHandlers/auth.js第98行和第104行,我依赖'数据'和'结束',但我想异步地这样做,以便checkID()(第95行)能够返回是真还是假。

1 个答案:

答案 0 :(得分:0)

你做不到。 HTTP请求是I / O操作,并且将始终以异步方式解析。您的checkID函数永远不会返回值。您需要添加第二个参数(通常称为callback),该参数将使用truefalse进行调用。

function checkID(req, callback) {
  var body = '';
  req.on('data', function (data) {
    body += data;
    if (body.length > 1e6)
        req.connection.destroy();
  });

  req.on('end', function () {

    var post = qs.parse(body);

    if ('loginInputLogin' in post && 'loginInputPassword' in post) {
        console.log('login : '+post['loginInputLogin']);
        console.log('password : '+post['loginInputPassword']);
    }

    if (post['loginInputLogin'] === 'fointard' && post['loginInputPassword'] === 'f01n') {
        console.log('ID confirmed');

        callback(true);
    }

    callback(false);
  });
}

并像这样使用它:

checkID(yourRequest, function(success) {
  if(success) {
    //login successfull
  } else {
    //login failed
  }
})