Node.js Callback不将值返回给调用函数。刚刚超时

时间:2017-06-09 02:56:59

标签: node.js

所以我认为我有这个正确但但由于某种原因它没有按照我的想法执行。我只想解码JWT令牌并传回数据。这是代码:

var jwtToken = function(message, callback) {
    var tokenArray = message.headers['authorization'];
    var array = tokenArray.toString().split(' ');

    if (array[0] == 'Bearer') {
        var token = array[1];
    } else {
        return callback.status(401).json({message: "bad json token"});
    }

    var map = JSON.parse(process.env.AUTH0_SECRET);

    var decoded = jwt2.decode(token, {complete: true});
    console.log('PAYLOAD:');
    console.log(decoded.payload);
    var clientId = decoded.payload.aud;
    var secret = map[clientId];

    //console.log('ENVIRONMENT SECRET: ' + map);
    //console.log('CLIENT ID: ' + clientId);
    //console.log('MAPPED SECRET: ' + secret);

    jwt2.verify(token, secret, function(err, decode){
        if (err) {
            callback.status(401).json({message: "JSON is incorrect or expired"})
        } else {
            callback = decode;
        }
    });
};

//route to make sure that the API works
app.get('/', function(req,res) {
    jwtToken(req, function(data){
       console.log(data);
       res.json({ message: 'You are connected to the API  ' + data})
    });
});

我期望的是我将请求传递给jwtToken函数,然后我会在回调中找回已解码的令牌。然后我会发送带有消息的响应和解码的令牌。我得到的是来自jwtToken调用的日志中的数据,但随后它会一直运行直到超时。我只是不确定我在Callback中搞砸了什么会阻止它发回结果。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

你不是在任何地方呼叫 callback。只需分配给decode即可。你需要这样做:

callback(decode);

假设decode是您datacallback所需的值。