如何在自己的函数中定义回调函数?的NodeJS

时间:2014-06-29 20:12:39

标签: javascript node.js callback

我在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(); 
} 
})

2 个答案:

答案 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);
    }
}