【发布时间】:2015-08-22 01:53:24
【问题描述】:
我通过 POST 将用户名和密码发送到 /user/login 路由上的 Node.js API。这是函数:
module.exports.login = function(req, res) {
User.findOne({email: req.body.email}, function(err, user) {
if(err) throw err;
if(!user) {
res.json({success: false, message: 'Invalid username or password!'});
} else {
if(!bcrypt.compareSync(req.body.password, user.password)) {
res.json({success: false, message: 'Invalid username or password!'});
} else {
var token = jwt.sign(user, config.secret, {
expiresInMinutes: 1440
});
res.json({success: true, token: new Buffer(token).toString('base64')});
}
}
});
}
为了获取帖子正文变量,我使用了 body-parser 模块。每当我发送没有电子邮件的 POST 请求时,req.body.email 返回undefined 并且猫鼬会在数据库中找到第一个用户(没有电子邮件验证)。
这很好,因为它会检查密码并返回错误消息。问题是,当req.body.password 是undefined 时,bcrypt.compareSync 返回一个错误,并且 node.js 会这样崩溃:
throw Error("Illegal arguments: "+(typeof s)+', '+(typeof hash));
Error: Illegal arguments: undefined, string
我可以先检查变量是否未定义,但必须有更好的方法来解决这个问题?
【问题讨论】:
标签: javascript node.js post express body-parser