gpt4 book ai didi

javascript - Express js get() 中的方法 - 返回未定义

转载 作者:行者123 更新时间:2023-12-03 05:37:01 24 4
gpt4 key购买 nike

我有这个 Node.js 代码,应该使用 Express.js http get 从我的 http auth header 中解码我的 jwt token 。

当我在 Express js get() 方法中编写 decodeToken() 代码时,一切正常。

当我将其提取到外部方法(decodeToken() 方法)时,我从此方法中获得了 undefined 值。请注意,当此代码被硬编码在方法 get() 内时,它可以工作。

为什么这是 Node.js 的异步本质?该方法是否在 get() 方法应该分配 token 之后完成?

如果我使用 Promise,它能解决这个问题吗?

var jwtCheck = expressJwt({
secret: "some secret"

});

app.use('/test', jwtCheck);

app.get('/test', function (req, res) {

var token = req.get('Authorization').split("Bearer ")[1];

var information = decodeToken(token)
console.log("information: "+information);
if (information!=null) {
res.json(information);
}
else {
res.json('Failed to authenticate token.');
}
});

var decodeToken = function (token) {
console.log(token);
jwt.verify(token, secret, function (err, decoded) {
if (err) {
console.log('Failed to authenticate token.');
return null;
} else {

return (decoded);
}
});
}

var getToken = function (req) {
return req.get('Authorization').split("Bearer ")[1];
}

最佳答案

jwt.verify 是异步的,因为您向它传递了一个回调,因此调用它的任何内容都需要处理该回调。您可以查看 Promise 来稍微清理一下逻辑,但只需使用您拥有的代码,您就可以像这样修改它:

var jwtCheck = expressJwt({
secret: "some secret"

});

app.use('/test', jwtCheck);

app.get('/test', function (req, res) {

var token = req.get('Authorization').split("Bearer ")[1];

// pass callback to decodeToken that gets called after the token is verified
decodeToken(token, function(information) {
// this function won't execute until decodeToke calls it as `next()`
console.log("information: "+information);
if (information!=null) {
res.json(information);
}
else {
res.json('Failed to authenticate token.');
}
})
});

// accept `next` callback
var decodeToken = function (token, next) {
console.log(token);
jwt.verify(token, secret, function (err, decoded) {
if (err) {
console.log('Failed to authenticate token.');
return next(null);
} else {

return next(decoded);
}
});
}

var getToken = function (req) {
return req.get('Authorization').split("Bearer ")[1];
}

关于javascript - Express js get() 中的方法 - 返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40686868/

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