До сих пор я определял обработчики get
и post
с помощью только (req, res)
в качестве аргументов, предполагая, что я помещаю эти обработчики в цепочку промежуточного программного обеспечения и слежу за тем, чтобы я обрабатывал любые ответы и правильная обработка ошибок в этих обработчиках... поэтому не имеет значения, что я не ссылаюсь на next
.
Является ли это правильным и разумным подходом, или это хорошая практика всегда вызывать next()
, даже если (в настоящее время) ничего не происходит потом? Например, возможно, в будущем вы, возможно, захотите сделать некоторую обработку после этих маршрутов... или, может быть, есть причина, по которой я еще не сталкивался с тем, почему хорошей практикой всегда вызывать next()
.
Например, в экспресс путеводитель по маршрутизации следующий простой пример:
app.get('/example/b', function (req, res, next) {
console.log('the response will be sent by the next function ...')
next()
}, function (req, res) {
res.send('Hello from B!')
})
Конечно, я понимаю, что это очень простой пример, иллюстрирующий, что обработчики могут быть привязаны и не предназначены для обеспечения полной структуры для обработчика get
, но было бы лучше определить и использовать next
даже во втором обработчике следующим образом:
app.get('/example/b', function (req, res, next) {
console.log('the response will be sent by the next function ...')
next()
}, function (req, res, next) {
res.send('Hello from B!')
next()
})
Или на практике принято предполагать, что функция обработчика, которая отправляет ответ клиенту, должна не вызывать next()
... т.е. предполагается, что цепочка будет заканчиваться на обработчик, который фактически отправляет ответ?
Или нет установленной практики в этом вопросе?
Мне даже интересно, может ли быть распространено не отправлять какой-либо ответ в обработчике get
, а отложить его до выделенного обработчика ответа, следующего за... под которым я подразумеваю обработчик ответа OK
, а не обработчик ответа об ошибках (для которого, как представляется, обычно принято определять окончательный обработчик ошибок и вызвать next(err)
). Таким образом, в случае отсутствия ошибок вы вызываете next()
и в следующем промежуточном программном обеспечении вы будете использовать res.status(200).send(req.mydata)
, где req.mydata
добавляется в ваш обработчик get
.