2016-07-11 4 views
2

В настоящее время я использую множество маршрутов в Express. Некоторые маршруты могут быть довольно длинными. Общий маршрут выглядит следующим образом:Неопределенный аргумент при использовании функции обратного вызова для экспресс-маршрута

router.get('/api/comments', function(req, res, next){ 
    Comment.find({"user": req.payload._id}).exec(function(err,comments){ 
    if(err){return next(err); } 
    res.json(comments); 
    }) 
} 

Это работает нормально. Но я несколько раз вызываю маршруты, и это может быть довольно продолжительным. Поэтому я пытаюсь создать функцию обратного вызова, которая может быть вызвана различными маршрутами. Например.

var testFunction = function(req, res, next){ 
    Comment.find({"user": req.payload._id}).exec(function(err,comments){ 
    if(err){return next(err); } 
    res.json(comments); 
    }) 
} 

router.get('/api/comments', testFunction(req,res,next)); 

Однако в последней строке я всегда получаю ошибку «req is not defined». Просто интересно, что я здесь делаю неправильно?

ответ

1

router принимает функцию как аргумент, а не результат выполнения этой функции.

router.get('/api/comments', testFunction); будет работать.

+0

Это делает работу. Но тогда, если мне нужно передать некоторые аргументы функции, как мне это сделать? – Sydney

+0

@Sydney - используйте '.bind()' для связывания аргументов или использования анонимной функции, которая ничего не делает, вызывая вашу функцию с помощью необходимых аргументов. – jfriend00

1

Попробуйте делать router.get('/api/comments', testFunction); вместо router.get('/api/comments', function(req, res, next)

Смежные вопросы