2014-06-29 102 views
1

我在nodeJS中很新,遇到以下问题:我在我的一个控制器中定义了一个函数,我想验证一个JSON-Web-Token。我用了以下功能:如何在自己的函数中定义回调函数? NodeJS

exports.validate = function (token, cb) { 
    jwt.verify(token, secretToken, cb(err, decoded)); 
} 

但每次我想运行它,给人的NodeJS我的错误,那就是犯错“没有定义?在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

你为什么要调用这个函数? – SLaks

+0

我不明白?你的意思是哪个功能?就像我说的,我对nodeJS很新。也许我没有正确理解回调的概念。你会如何做到这一点? – mietzekotze

+0

这里没有特定的节点,回调是一种非常常见的JavaScript模式。 – Quentin

回答

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); 
    } 
} 
+0

没有。有一个更简单的解决方案。你能发现它吗? – Bergi

+0

return cb(err,decode),对吗? :)所以这是我的错误?我必须返回该功能? – mietzekotze

+0

@Bergi它把它分为两部分,因为你通常想在结束之前做一些结果(在这里解码)。 – cvng

2

在JWT-实施例中,第三个参数verify函数(使用函数表达式创建) 。

在您的代码中,第三个参数是返回值或调用cb(err, decoded)cb函数可能会返回一个函数,但是err是一个变量,您将通过它。

如果你想使用一个名为cb功能,然后定义它,然后传递给函数:

function cb(err, decoded) { 
    // do stuff with err and/or decoded 
} 
jwt.verify(token, secretToken, cb); 
+0

这就是我所做的。以下是我如何使用它:AuthController.validate(req.headers ['api-token'],function(err,decoded){if(err){err} {'error:',err}; res。状态(401); 的next();} 否则如果(解码){ 的console.log( '成功:',解码); 的next();} }); – mietzekotze

+0

我更新了我的第一篇文章,以包含它。我理解到目前为止的概念,这就是为什么我不明白,为什么上述不工作。据我所知,我做的一切都是正确的。 – mietzekotze