2014-11-21 2 views
-1

Я использую Expressjs и Mongoosejs. Мои маршруты выглядеть примерно так:Асинхронная работа в router.use

router.use('/', function(req, res, next) { 
    //check for matching API KEY in database for all routes that follow 
    //Asynchronous Mongoosejs find.one 
} 

router.get('/status/:key/:token', function (req, res) { 
    //more code here that needs to wait before being executed 
} 

Просто интересно, если функция асинхронной в router.use рассосется до router.get код выполняются?

ответ

0

Конечно, это будет до тех пор, пока вы используете next() правильно

Пример:

router.use('/', function(req, res, next) { 
    somethingAsync(function(err, result) { 
    if(err) return next(err); 
    // Do whatever 
    return next(); 
    }); 
}); 

стек маршрутизатор называется в маршруты порядка добавляются к нему. Вызов next() вызывает следующий маршрут в стеке, соответствующий указанному пути.

Вызов next(someError) вызывает следующий путь обработки ошибок в стеке. обработки ошибок маршруты имеют 4 аргументы, а не 3.

Пример обработки ошибок маршрута:

router.use(function(err, req, res, next) { 
    res.status(500); 
    return res.send('500: Internal Server Error'); 
}); 

Полезные ссылки:

+0

Приветствия для этого! – tommyd456

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