2016-07-07 6 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