我在家里运行了一个基于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行)能够返回是真还是假。
答案 0 :(得分:0)
你做不到。 HTTP请求是I / O操作,并且将始终以异步方式解析。您的checkID
函数永远不会返回值。您需要添加第二个参数(通常称为callback
),该参数将使用true
或false
进行调用。
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
}
})