2014-06-29 96 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