Подтвердить что ты не робот

Быстрое промежуточное ПО: app.use и app.all

Есть ли разница между

app.use('/some/path', function(req, res, next() {})

и

app.all('/some/path', function(req, res, next() {})

Они являются и промежуточными функциями, которые вызываются только для /some/path запросов, правда?

4b9b3361

Ответ 1

Существует большая разница между использованием этих двух примеров. Функции, зарегистрированные в app.use, являются общими функциями промежуточного программного обеспечения и называются соответствующими их позиции в стеке промежуточного программного обеспечения, обычно внутри функции app.configure. Этот тип промежуточного программного обеспечения обычно размещается до app.route, за исключением функций обработки ошибок.

С другой стороны, app.all - это функция маршрутизации (обычно не называемая промежуточным программным обеспечением), которая охватывает все HTTP-методы и называется только внутри app.route. Если какая-либо из ваших предыдущих функций маршрутизатора соответствует /some/path и не вызывает обратный вызов next, app.all не будет выполняться, поэтому функции app.all обычно находятся в начале вашего блока маршрутизации.

Существует также третий тип промежуточного программного обеспечения, используемый в ваших функциях маршрутизации, например.

app.get('/some/path', middleware1, middleware2, function(req, res, next) {});

который типично используется для ограничения доступа или выполнения общих задач, связанных с маршрутом /some/path.

Для практического применения вы можете использовать обе функции, но будьте осторожны с различием в поведении при использовании app.use с /some/path. В отличие от app.get, app.use удаляет /some/path с маршрута перед вызовом анонимной функции.

Дополнительную информацию можно найти в документации express.