javascript node.js next ()


149

Vedo molto uso nextin node.js.

Che cos'è, da dove viene? Che cosa fa? Posso usarlo lato client?

Mi dispiace che sia usato ad esempio qui: http://dailyjs.com/2010/12/06/node-tutorial-5/

cerca la funzione loadUser.


Non l'ho visto da nessuna parte e non è indicato da nessuna parte nella documentazione. Sei sicuro che non sia definito da qualche parte nella base di codice che stai guardando?
Samir Talwar,

È troppo vago. Puoi fare un esempio di contesto.
Raynos,

Risposte:


115

Questa sembra essere una convenzione di denominazione variabile nel codice di flusso di controllo Node.js, in cui un riferimento alla funzione successiva da eseguire viene dato a un callback per l'avvio al termine.

Vedi, ad esempio, gli esempi di codice qui:

Diamo un'occhiata all'esempio che hai pubblicato:

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) {
  // ...
});

La loadUserfunzione prevede una funzione nel suo terzo argomento, che è associata al nome next. Questo è un normale parametro di funzione. Contiene un riferimento all'azione successiva da eseguire e viene chiamato una volta loadUsereseguito (a meno che non sia possibile trovare un utente).

Non c'è niente di speciale nel nome nextin questo esempio; avremmo potuto chiamarlo in qualsiasi modo.


Questo è anche usato parecchio in express.js ma non lo è .next(). Sembra chiedere nextcome metodo su un oggetto.
Raynos,

1
Meglio usarereturn next();
Ryan Walton

2
@RyanWalton Sono d'accordo
Wayne,

Ho usato return callback()invece direturn next()
vijay il

39

È una convenzione di denominazione utilizzata quando si passano i callback in situazioni che richiedono l'esecuzione seriale di azioni, ad esempio la directory di scansione -> leggi i dati del file -> fa qualcosa con i dati. Questo è preferibile alla nidificazione profonda dei callback. Le prime tre sezioni del seguente articolo sul blog HowToNode di Tim Caswell offrono una buona panoramica di ciò:

http://howtonode.org/control-flow

Vedi anche la sezione Azioni sequenziali della seconda parte di quel post:

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


1
Grazie mille per questo link. Spiega molte cose quando si inizia a lavorare con nodejs
Hassam Abdelillah,

Il link non funziona ora. Fornisce un errore interno del server
Deep Kakkar

1
Link aggiornati dall'archivio internet
Pero P.

grazie per i collegamenti, ho iniziato a usare Node qualche mese fa ma mi ritrovo a usare queste pratiche ma non le capisco perfettamente
Charles Smith,

8

È fondamentalmente come un callback che express.js usa dopo che una certa parte del codice è stata eseguita e fatta, puoi usarla per assicurarti che parte del codice sia fatta e cosa vuoi fare la prossima cosa, ma fai sempre attenzione che solo tu fai uno res.sendin ogni blocco REST ...

Quindi puoi fare qualcosa del genere come un semplice next()esempio:

app.get("/", (req, res, next) => {
  console.log("req:", req, "res:", res);
  res.send(["data": "whatever"]);
  next();
},(req, res) =>
  console.log("it's all done!");
);

È anche molto utile quando desideri avere un middleware nella tua app ...

Per caricare la funzione middleware, chiamare app.use (), specificando la funzione middleware. Ad esempio, il codice seguente carica la funzione middleware myLogger prima del percorso sul percorso principale (/).

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);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.