2016-07-07 77 views
0

我還沒有找到類似的設置的問題...我該如何解決這個問題?節點錯誤:Route.get()需要回調函數,但得到[對象未定義]

我正在使用節點,快速路由,請求調用api中的令牌,以及異步系列來保持一切清潔。我通過在異步系列中僅顯示一個函數簡化了代碼。

routes.js

var express = require('express') 
var router = express.Router() 
var isAuthenticated = require("./passportAuth.js") 
var tokens = require('./tokens') 

module.exports = function() { 
    router.get('/allTokens', isAuthenticated, tokens()) 
    return router 
} 

./tokens.js

var request = require("request") 
var async = require('async') 

module.exports = function(req, res, next) { 

    var allTokens = function(callback) { 
    request('url', function(err, res, body) { 
     if(err) return callback(err, null) 
     return callback(null, 'success') 
    }) 
    } 

    var asyncFinally = function(err, results) { 
    if(err) return next(err) 
    res.send(results) 
    } 

    async.series([allTokens], asyncFinally) 
} 

錯誤消息

Route.get() requires callback functions but got a [object Undefined] 

回答

0

路由器期待一個函數值,但你傳遞一個函數調用令牌()。嘗試一下令牌。

+0

已解決。哇!那很簡單吧。非常感謝你,我完全不明白爲什麼它不能按原樣工作。 – JasonA

0

您過早地調用tokens()函數,而不是僅僅傳遞參考。更改此:

router.get('/allTokens', isAuthenticated, tokens()) 

這樣:

router.get('/allTokens', isAuthenticated, tokens) 

請記住,任何時候你把()函數名,這意味着現在(立即)來調用它之後。任何時候你只需要傳遞函數名稱,它只是傳遞一個函數的引用,這個函數可以在適當的時候被調用(這就是你想要的)。這是一個非常常見的錯誤。

由於呼叫tokens()返回undefined,這就是你最終傳遞到router.get(),因此你看到的具體錯誤信息。

+0

謝謝jfriend00,你是對的,它工作! – JasonA