Когда использовать next() и возвращать next () в узле.js
сценарий: рассмотрим следующую часть кода из узла веб-приложения.
app.get('/users/:id?', function(req, res, next){
var id = req.params.id;
if (id) {
// do something
} else {
next(); //or return next();
}
});
вопрос: Я проверяю, с какой из них идти просто next()
или return next()
. Приведенный выше пример кода работает точно так же для обоих & не показал никакой разницы в выполнении.
вопрос: может кто-то поставить свет на это, когда использовать next()
и когда использовать return next()
и какая-то важная разница?
3 ответа:
некоторые люди всегда пишу
return next()
обеспечить выполнение останавливается после запуска обратного вызова.Если вы этого не сделаете, вы рискуете вызвать обратный вызов во второй раз позже, что обычно приводит к разрушительным результатам. Ваш код в порядке, но я бы переписал его как:
app.get('/users/:id?', function(req, res, next){ var id = req.params.id; if(!id) return next(); // do something });
это экономит мне уровень отступа, и когда я читаю код снова позже, я уверен, что нет никакого способа
next
вызывается дважды.
как ответ @ Laurent Perrin:
если вы этого не сделаете, вы рискуете вызвать обратный вызов во второй раз позже, что обычно имеет разрушительные результаты
я приведу пример здесь, Если вы пишете промежуточное программное обеспечение следующим образом:
app.use((req, res, next) => { console.log('This is a middleware') next() console.log('This is first-half middleware') }) app.use((req, res, next) => { console.log('This is second middleware') next() }) app.use((req, res, next) => { console.log('This is third middleware') next() })
вы узнаете, что выход в консоли:
This is a middleware This is second middleware This is third middleware This is first-half middleware
то есть, он запускает код ниже next() после завершения всех функций промежуточного программного обеспечения.
однако, если вы используете
return next()
, это выскочит обратный вызов сразу и код нижеreturn next()
вызов будет недоступен.
next()
является частью подключение промежуточного программного обеспечения. Обратные вызовы для потока маршрутизатора не волнует, если вы возвращаете что-либо из ваших функций, так чтоreturn next()
иnext(); return;
в основном то же самое.в случае, если вы хотите остановить поток функций, которые вы можете использовать
next(err)
следующимapp.get('/user/:id?', function(req, res, next) { console.log('function one'); if ( !req.params.id ) next('No ID'); // This will return error else next(); // This will continue to function 2 }, function(req, res) { console.log('function two'); } );
очень много
next()
используется для расширения промежуточного программного обеспечения ваших запросов.