我在nodeJS中很新,遇到了以下问题:我在我的一个控制器中定义了一个函数,我想验证一个JSON-Web-Token。我使用了以下功能:
exports.validate = function (token, cb) {
jwt.verify(token, secretToken, cb(err, decoded));
}
但每次我想运行它时,nodeJS都会给我错误,'err'没有定义?在jwt-Example中有以下示例:
// verify a token symmetric
jwt.verify(token, 'shhhhh', function(err, decoded) {
console.log(decoded.foo)
});
所以某个地方显然我错了,但我不知道是什么。我也不知道该寻找什么...我已经完成了一些谷歌搜索,但到目前为止没有任何帮助。
我很乐意听取您的意见。
此致
//编辑:这就是我调用函数的方式:
AuthController.validate(req.headers['api-token'], function(err, decoded){
if(err){ console.log('Error: ', err);
res.status(401); next();
} else if(decoded) {
console.log('Success: ', decoded);
next();
}
})
答案 0 :(得分:2)
在jwt-Example中,verify
的第三个参数是函数(使用函数表达式创建)。
在您的代码中,第三个参数是返回值或调用cb(err, decoded)
。 cb
函数可能会返回一个函数,但err
是您将传递给的变量。
如果要使用名为cb
的函数,请定义它,然后传递函数:
function cb(err, decoded) {
// do stuff with err and/or decoded
}
jwt.verify(token, secretToken, cb);
答案 1 :(得分:0)
如果您希望您的函数使用回调,它应该以这种方式使用它:
exports.validate = function (token, cb) {
jwt.verify(token, secretToken, function (err, decoded) {
if (err)
return cb(err, null);
// callback have to handle error
return cb(null, decoded);
}
}