Javascript 如何在自己的函数中定义回调函数?NodeJS
我是nodeJS新手,遇到了以下问题:我在我的一个控制器中定义了一个函数,我想验证一个jsonweb令牌。我使用了以下功能:Javascript 如何在自己的函数中定义回调函数?NodeJS,javascript,node.js,callback,Javascript,Node.js,Callback,我是nodeJS新手,遇到了以下问题:我在我的一个控制器中定义了一个函数,我想验证一个jsonweb令牌。我使用了以下功能: exports.validate = function (token, cb) { jwt.verify(token, secretToken, cb(err, decoded)); } AuthController.validate(req.headers['api-token'], function(err, decoded){ if(err){ conso
exports.validate = function (token, cb) {
jwt.verify(token, secretToken, cb(err, decoded));
}
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();
}
})
function cb(err, decoded) {
// do stuff with err and/or decoded
}
jwt.verify(token, secretToken, cb);
但每次我想运行它时,nodeJS都会给我一个错误,“err”没有定义?在jwt示例中,有以下示例:
// verify a token symmetric
jwt.verify(token, 'shhhhh', function(err, decoded) {
console.log(decoded.foo)
});
所以很明显我出了什么问题,但我不知道是什么。我也不知道该找什么。。。我做了一些谷歌搜索,但到目前为止没有任何帮助
我很想听到你的消息
问候
//编辑:这就是我调用函数的方式:
exports.validate = function (token, cb) {
jwt.verify(token, secretToken, cb(err, decoded));
}
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();
}
})
function cb(err, decoded) {
// do stuff with err and/or decoded
}
jwt.verify(token, secretToken, cb);
在jwt示例中,
verify
的第三个参数是一个函数(使用函数表达式创建)
在代码中,第三个参数是返回值或调用cb(err,decoded)
。cb
函数可能返回一个函数,但是err
是一个传递给它的变量
如果要使用名为cb
的函数,请定义该函数,然后传递该函数:
exports.validate = function (token, cb) {
jwt.verify(token, secretToken, cb(err, decoded));
}
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();
}
})
function cb(err, decoded) {
// do stuff with err and/or decoded
}
jwt.verify(token, secretToken, cb);
如果希望函数与回调一起使用,则应按以下方式使用:
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);
}
}
你为什么要调用这个函数?我不明白?你指的是哪个功能?就像我说的,我对nodeJS很陌生。也许我没有正确理解回调的概念。你会怎么做呢?这里没有特定于节点的东西,回调是一种非常常见的JavaScript模式。下面是我如何使用它的:AuthController.validate(req.headers['api-token'],函数(err,decoded){if(err){console.log('Error:',err');res.status(401);next();}else if(decoded){console.log('Success:',decoded);next();});我更新了我的第一篇文章,把它包括进去。到目前为止,我理解这个概念,这就是为什么我不理解,为什么上面的方法不起作用。在我看来,我做的一切都是对的。有一个更简单的解决方案。你能发现它吗?返回cb(错误,已解码),对吗?:)那是我的错?我必须返回函数?@Bergi It将其分为两部分,因为在最后一次返回之前,您通常需要对结果(此处已解码)进行处理。否。我的意思是
jwt.verify(token,secretToken,cb)代码>,因为我没想到OP会对结果做一些事情。