Есть ли разница между
app.use('/some/path', function(req, res, next() {})
и
app.all('/some/path', function(req, res, next() {})
Они являются и промежуточными функциями, которые вызываются только для /some/path запросов, правда?
Есть ли разница между
app.use('/some/path', function(req, res, next() {})
и
app.all('/some/path', function(req, res, next() {})
Они являются и промежуточными функциями, которые вызываются только для /some/path запросов, правда?
Существует большая разница между использованием этих двух примеров. Функции, зарегистрированные в 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.