Vedo molto uso next
in 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.
Vedo molto uso next
in 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.
Risposte:
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 loadUser
funzione 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 loadUser
eseguito (a meno che non sia possibile trovare un utente).
Non c'è niente di speciale nel nome next
in questo esempio; avremmo potuto chiamarlo in qualsiasi modo.
.next()
. Sembra chiedere next
come metodo su un oggetto.
return next();
return callback()
invece direturn next()
È 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:
È 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.send
in 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);