Eu vejo muito uso next
em node.js.
O que é, de onde vem? O que isso faz? Posso usá-lo no lado do cliente?
Desculpe, é usado, por exemplo, aqui: http://dailyjs.com/2010/12/06/node-tutorial-5/
procure a função loadUser.
Eu vejo muito uso next
em node.js.
O que é, de onde vem? O que isso faz? Posso usá-lo no lado do cliente?
Desculpe, é usado, por exemplo, aqui: http://dailyjs.com/2010/12/06/node-tutorial-5/
procure a função loadUser.
Respostas:
Parece ser uma convenção de nomenclatura variável no código de fluxo de controle do Node.js., em que uma referência à próxima função a ser executada é fornecida a um retorno de chamada para que ele inicie quando terminar.
Veja, por exemplo, os exemplos de código aqui:
Vejamos o exemplo que você postou:
function loadUser(req, res, next) {
if (req.session.user_id) {
User.findById(req.session.user_id, function(user) {
if (user) {
req.currentUser = user;
return next();
} else {
res.redirect('/sessions/new');
}
});
} else {
res.redirect('/sessions/new');
}
}
app.get('/documents.:format?', loadUser, function(req, res) {
// ...
});
A loadUser
função espera uma função em seu terceiro argumento, que está vinculado ao nome next
. Este é um parâmetro de função normal. Ele contém uma referência à próxima ação a ser executada e é chamado assim que loadUser
é feito (a menos que um usuário não possa ser encontrado).
Não há nada de especial no nome next
neste exemplo; nós poderíamos ter chamado qualquer coisa.
.next()
. Ele parece perguntar next
como um método em um objeto.
return next();
return callback()
vez dereturn next()
É uma convenção de nomenclatura usada ao transmitir retornos de chamada em situações que exigem execução serial de ações, por exemplo, diretório de varredura -> ler dados do arquivo -> fazer algo com os dados. Isso é preferível ao aninhamento profundo dos retornos de chamada. As três primeiras seções do artigo a seguir no blog HowToNode de Tim Caswell oferecem uma boa visão geral disso:
http://howtonode.org/control-flow
Consulte também a seção Ações seqüenciais da segunda parte dessa postagem:
É basicamente como um retorno de chamada que o express.js usa depois que uma certa parte do código é executada e concluída, você pode usá-lo para garantir que parte do código seja concluída e o que você quer fazer em seguida, mas sempre lembre-se de que você só pode faça um res.send
em cada bloco REST ...
Então você pode fazer algo assim como um next()
exemplo simples :
app.get("/", (req, res, next) => {
console.log("req:", req, "res:", res);
res.send(["data": "whatever"]);
next();
},(req, res) =>
console.log("it's all done!");
);
Também é muito útil quando você deseja ter um middleware no seu aplicativo ...
Para carregar a função do middleware, chame app.use (), especificando a função do middleware. Por exemplo, o código a seguir carrega a função de middleware myLogger antes da rota para o caminho raiz (/).
var express = require('express');
var app = express();
var myLogger = function (req, res, next) {
console.log('LOGGED');
next();
}
app.use(myLogger);
app.get('/', function (req, res) {
res.send('Hello World!');
})
app.listen(3000);