2016-07-07 2 views
0

Ich habe keine Frage mit einem ähnlichen Setup gefunden ... wie kann ich das beheben?Node Error: Route.get() benötigt Callback-Funktionen, hat aber ein [Objekt Undefined]

Ich benutze Knoten, Express-Routing, Anfrage, ein Token aus einer API und Async-Serie anzurufen, um alles sauber zu halten. Ich habe den Code vereinfacht, indem ich nur eine Funktion in der Async-Reihe gezeigt habe.

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) 
} 

Fehlermeldung

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

Antwort

0

Der Router erwartet einen Wert Funktion aber Sie übergeben in einer aufgerufenen Funktion Token(). Versuche nur Tokens.

+0

Gelöst. Beeindruckend! So einfach. Vielen Dank, ich war völlig verwirrt, warum es nicht so funktionierte wie es ist. – JasonA

0

Sie rufen die Funktion tokens() vorzeitig auf, anstatt nur einen Verweis darauf zu übergeben. Ändern Sie dies:

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

dazu:

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

Denken Sie daran, dass jedes Mal, wenn Sie () nach einem Funktionsnamen setzen, das bedeutet, es zu nennen jetzt (sofort). Jedes Mal, wenn Sie den Funktionsnamen selbst übergeben, wird nur eine Referenz an die Funktion übergeben, die später zur entsprechenden Zeit aufgerufen werden kann (das ist es, was Sie hier wollen). Dies ist ein sehr häufiger Fehler.

Seit Aufruf tokens() gibt undefined, das ist, was Sie bis router.get() übergeben und damit, warum Sie die spezifische Fehlermeldung erhalten, die Sie sehen.

+0

Danke jfriend00, du hast absolut Recht und es hat funktioniert! – JasonA

Verwandte Themen