В следующем тестовом коде проверяется req.query
, чтобы увидеть, является ли его значение name = cat.Если это не так next()
запускает следующую часть промежуточного программного обеспечения.Это выполняется без включения оператора return
после next()
, и он работает как ожидалось.
app.get('/test', (req, res, next) => {
if (req.query.name != 'cat') {
next();
}
res.send('it was cat');
});
app.get('/test', (req, res) => {
res.send('it was not cat');
});
Однако, когда я изменяю res.send
на res.sendFile
во второй части промежуточного программного обеспечения, поведение полностьюразные.
app.get('/test', (req, res) => {
res.sendFile(__dirname + '/public/index.html');
});
После изменения res.send('it was cat');
в первом компоненте промежуточного программного обеспечения срабатывает каждый раз, независимо от значения имени.Кроме того, вторая часть промежуточного программного обеспечения никогда не срабатывает.
Это можно легко исправить, добавив return
после next()
в первую часть промежуточного программного обеспечения.Поведение снова становится предсказуемым.
app.get('/test', (req, res, next) => {
if (req.query.name != 'cat') {
next();
return;
}
res.send('it was cat');
});
app.get('/test', (req, res) => {
res.sendFile(__dirname + '/public/index.html');
});
Почему это происходит с оператором return
и без него?return
необходим, когда я использую res.sendFile
, но не когда я использую res.send
.Я уверен, что упускаю что-то очевидное, но я не понимаю закономерность.