2016-07-07 6 views
0

同様の設定で質問が見つかりませんでした...どうすれば修正できますか?ノードエラー:Route.get()はコールバック関数を必要としますが、[オブジェクト未定義]を持っています

私はnode、expressルーティング、apiからのトークンの呼び出し要求、および非同期シリーズを使用してすべてをきれいに保ちます。私は、非同期シリーズで1つの関数を表示するだけでコードを単純化しました。

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

関連する問題