gpt4 book ai didi

javascript - NodeJS 在函数完成之前响应

转载 作者:太空宇宙 更新时间:2023-11-04 02:56:31 25 4
gpt4 key购买 nike

我正在为一个学校项目使用 NodeJS 和 Express 编写一个 API,但我正在努力解决以下问题:

函数 getAuthUserId 解码 JWT token 并从 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

提前致谢!

最佳答案

你需要做出 promise ,就像这样。

API

apiRoutes.post('/user/authTestID', function(req, res) {
getAuthUserId(req, res).then(function (UId) => {
console.log(UId);

if (UId) {
res.sendStatus(200);
}else{
res.sendStatus(400);
}
});

}, function(err) {
console.log(err.msg)
res.status(err.status).send(err.msg);
});

函数

function getAuthUserId(req, res) {
return new Promise(function(resolve, reject){
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) {
reject({status: 403, msg: 'Authentication failed. User not found.'});
} else {
console.log('Auth for ' + user.name + ' ' + user._id);
resolve(user._id)
}
});
} else {
reject({status: 403, msg: 'No token provided.'});
}
})
}

关于javascript - NodeJS 在函数完成之前响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43741065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com