我正在尝试为我的api创建一个登录路由。算法如下:
首先检查用户是否存在于数据库中(如果不存在,则发送404错误)。 然后我检查查询中的密码参数是否与数据库中的相同(如果没有,发送400错误)。 最后创建一个令牌并发送它。
以下是代码:
router.post('/login', function(req, res, next){
User.getUserByNick(req.params.nick,function(err, rows){
if(err){
res.json(err);
}
else if(!f.isEmpty(rows)){
res.status(404);
res.json({
error: 404,
message: 'Authentication failed. User not found.'
});
}
else{
res.json(rows);
if(res.password != req.params.password){
res.status(400);
res.json({
error: 400,
message: 'Authentication failed. Wrong password.'
});
}
else{
var token = jwt.sign(rows, process.env.JWT_SECRET, {
expiresInMinutes: 1440 // expires in 24 hours
});
res.json({
success: true,
message: 'Enjoy your token!',
token: token
});
}
}
});
});
但是当我尝试使用路由节点崩溃时。我在控制台中得到了下一个错误
/api/node_modules/mysql/lib/protocol/Parser.js:79
throw err; // Rethrow non-MySQL errors
^
ValidationError: "value" must be an object
我不知道为什么,getUserByNick运行良好,当找不到用户时返回[]。否则它会发送带有行的json。所以我认为可能是在我创建rows.password时。
答案 0 :(得分:0)
即使不能直接回答你的问题,我也发现问题不在于此。我认为你应该先做的主要事情是找到一种如何调试代码的方法。如果你能看到里面的req和res,你就不会问在哪里采取变量。你会发现它自己。如果您不熟悉调试器,请尝试使用visual studio代码。它是免费且强大的。 https://code.visualstudio.com/然后找到如何调试javascript的文档。
如果您想要半解决方案,可以尝试将变量打印到控制台:
console.log(req);
console.log(res);
浏览您的输入,您将找到问题的答案。