2015-05-30 2 views
1

В documentation он говорит:Что делает маршрут ('next') в ExpressJS?

Вы можете предоставить несколько функций обратного вызова, которые ведут себя так же, как промежуточного слоя, за исключением этих обратных вызовов может вызвать следующий («маршрут»), чтобы обойти оставшийся маршрут обратного вызова (ов). Вы можете использовать этот механизм для наложения предварительных условий на маршрут, затем передать управление на последующие маршруты, если нет причин для продолжения текущего маршрута.

Означает ли это, что если я пишу маршрут, как это:

app.get('/', function(req, res, next) { 
    if (!req.params.id) { 
     res.statusCode(400).send({error: "id parameter is required"}); 
     next('route'); 
    } else { 
     next(); 
    } 
}, function(req, res) { 
    res.send({something: 'something'}) 
}); 

и params.id был undefined, то следующий маршрут не будет выполнен, но, если он присутствует это было?

В принципе, соглашение о кодировании/именовании немного меня сбивает с толку. Почему не next(false) вместо next('route')?

+1

Возможный дубликат [Экспресс следующая функция, что это действительно за?] (Http://stackoverflow.com/questions/13133071/express-next-function-what-is-it-really-for) – Dhiraj

ответ

1

Я нашел ответ. При использовании app или маршрутизатор Экспресс, вы можете определить несколько маршрутов для того же пути:

// first set of routes for GET /user/:id 
app.get('/user/:id', function (req, res, next) { 
    // logic 
}, function (req, res, next) { 
    // logic 
}); 

// second set of routes for GET /user/:id 
app.get('/user/:id', function (req, res, next) { 
    // logic 
}); 

Если любой из обратных вызовов (промежуточного уровня) для первого маршрута, вы звоните next('route'), все обратные вызовы для этого набор маршрутов будет пропущена и управление передается следующему набору маршрутов:

// first set of routes for GET /user/:id 
app.get('/user/:id', function (req, res, next) { 
    next('route') 
}, function (req, res, next) { 
    // this middleware won't be executed at all 
}); 

// second set of routes for GET /user/:id 
app.get('/user/:id', function (req, res, next) { 
    // the next('route') in the first callback of the first set of routes transfer control to here 
}); 

Теперь с помощью next('route'), а не next(false) имеет смысл: он передает управление следующему маршруту г для текущего пути.

0

(if) params.id не определено, тогда следующий маршрут не будет выполнен, но если бы он был представлен, это было бы?

Ключевая идея заключается в том, что следующий маршрут в файл будет проверил.

От duplicate question, который отвечает это гораздо, гораздо более подробно:

следующая() без аргументов говорит «просто шучу, я не реально хотение ручки этого». Он возвращается и пытается найти следующий маршрут, который будет соответствовать .

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