Antes de entender next
, você precisa ter uma pequena idéia do ciclo de solicitação-resposta no nó, embora não muito detalhadamente. Começa com você solicitando HTTP para um recurso específico e termina quando você envia uma resposta de volta ao usuário, ou seja, quando você encontra algo como res.send ('Hello World');
vamos dar uma olhada em um exemplo muito simples.
app.get('/hello', function (req, res, next) {
res.send('USER')
})
Aqui não precisamos de next (), porque resp.send encerrará o ciclo e entregará o controle de volta ao middleware da rota.
Agora vamos dar uma olhada em outro exemplo.
app.get('/hello', function (req, res, next) {
res.send("Hello World !!!!");
});
app.get('/hello', function (req, res, next) {
res.send("Hello Planet !!!!");
});
Aqui temos duas funções de middleware para o mesmo caminho. Mas você sempre obterá a resposta do primeiro. Porque isso é montado primeiro na pilha de middleware e o res.send encerrará o ciclo.
Mas e se nem sempre queremos o "Olá Mundo !!!!" resposta de volta. Para algumas condições, podemos querer o "Olá Planeta !!!!" resposta. Vamos modificar o código acima e ver o que acontece.
app.get('/hello', function (req, res, next) {
if(some condition){
next();
return;
}
res.send("Hello World !!!!");
});
app.get('/hello', function (req, res, next) {
res.send("Hello Planet !!!!");
});
O que está next
fazendo aqui. E sim, você pode ter gusses. Irá pular a primeira função do middleware se a condição for verdadeira e chamar a próxima função do middleware e você terá a "Hello Planet !!!!"
resposta.
Portanto, passe o controle para a próxima função na pilha de middleware.
E se a primeira função de middleware não enviar nenhuma resposta, mas executar uma parte da lógica e você receber a resposta da segunda função de middleware.
Algo como abaixo: -
app.get('/hello', function (req, res, next) {
// Your piece of logic
next();
});
app.get('/hello', function (req, res, next) {
res.send("Hello !!!!");
});
Nesse caso, você precisa que ambas as funções do middleware sejam invocadas. Portanto, a única maneira de alcançar a segunda função do middleware é chamando next ();
E se você não ligar para o próximo. Não espere que a segunda função de middleware seja chamada automaticamente. Depois de invocar a primeira função, sua solicitação será deixada em suspenso. A segunda função nunca será chamada e você não receberá a resposta novamente.
res.send
para concluir a solicitação. Se não existir, provavelmente existe outro manipulador que emitirá um erro e concluirá a solicitação.