【发布时间】:2017-09-30 03:57:19
【问题描述】:
我正在为一个学校项目使用 NodeJS 和 Express 编写 API,但我正在努力解决以下问题:
getAuthUserId 函数解码 JWT 令牌并从 mongoDB 服务器中的用户获取 Id。
我在 REST 调用“/user/authTest”中调用此函数。但是当我调用这个时,服务器在数据库可以返回 Id 之前做出响应,并且变量 UId 是未定义的。如您所见,实际上找到了 Id。关于如何解决此问题的任何想法?
API调用代码:
apiRoutes.post('/user/authTestID', function(req, res) {
var UId = getAuthUserId(req, res);
console.log(UId);
if (UId) {
res.sendStatus(200);
}else{
res.sendStatus(400);
}
});
功能:
function getAuthUserId(req, res) {
var user = new User();
var token = user.getToken(req.headers);
if (token) {
var decoded = jwt.decode(token, config.secret);
User.findOne({
name: decoded.name
}, function(err, user) {
if (err) throw err;
if (!user) {
res.status(403).send({success: false, msg: 'Authentication failed. User not found.'});
return false
} else {
console.log('Auth for ' + user.name + ' ' + user._id);
return user._id
}
});
} else {
res.status(403).send({success: false, msg: 'No token provided.'});
return '';
}
}
终端的输出:
[nodemon] restarting due to changes...
[nodemon] starting `node server.js`
Connected to MongoDB
undefined
::ffff:192.168.0.111 - POST /user/authTestID HTTP/1.1 400 11 - 175.006 ms
Auth for test 58f8954c3602b80552b6f1fb
提前致谢!
【问题讨论】:
-
真的!我认为这是完全不同的东西,因为我之前对 AJAX 了解不多,并认为它与 JS 无关。我现在就调查一下!
标签: javascript node.js rest express mongoose