javascript node.js next ()

148

Eu vejo muito uso nextem 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.

atormentar
fonte
Eu não vi isso em nenhum lugar e não está mencionado em nenhum lugar da documentação. Tem certeza de que não está definido em algum lugar da base de código que você está procurando?
Samir Talwar 21/03
Isso é muito vago. Você pode dar um exemplo de contexto.
21411 Raynos

Respostas:

114

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 loadUserfunçã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 nextneste exemplo; nós poderíamos ter chamado qualquer coisa.

Wayne
fonte
Isso também é usado bastante no express.js, mas não é .next(). Ele parece perguntar nextcomo um método em um objeto.
Raynos
1
Melhor usarreturn next();
Ryan Walton
2
@RyanWalton Eu concordo
Wayne
Eu usei em return callback()vez dereturn next()
vijay
39

É 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:

http://howtonode.org/control-flow-part-ii

Pero P.
fonte
1
Muito obrigado por esses links. Ele explica um monte de coisas quando começar a trabalhar com nodejs
Hassam Abdelillah
O link não está funcionando agora. Está dando erro interno do servidor
Deep Kakkar
1
Links atualizados do arquivo da Internet
Pero P.
obrigado pelos links, eu comecei a usar Nó de alguns meses atrás, mas eu me encontrar com essas práticas, mas não totalmente compreendê-los
Charles Smith
8

É 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.sendem 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);
Alireza
fonte