Je vois beaucoup d'utilisation next
dans node.js.
De quoi s'agit-il, d'où vient-il? Qu'est ce que ça fait? Puis-je l'utiliser côté client?
Désolé, il est utilisé par exemple ici: http://dailyjs.com/2010/12/06/node-tutorial-5/
recherchez la fonction loadUser.
Il semble s'agir d'une convention de dénomination de variable dans le code de flux de contrôle Node.js, dans laquelle une référence à la fonction suivante à exécuter est donnée à un rappel afin que ce dernier puisse démarrer lorsqu'il est terminé.
Voir, par exemple, les exemples de code ici:
Regardons l'exemple que vous avez posté:
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 fonction loadUser
attend une fonction dans son troisième argument, lié au nom next
. Ceci est un paramètre de fonction normal. Il contient une référence à la prochaine action à exécuter et est appelé une fois que loadUser
est terminé (sauf si un utilisateur est introuvable).
Le nom next
n'a rien de spécial dans cet exemple; nous aurions pu le nommer n'importe quoi.
C'est la convention de dénomination utilisée lors du passage de rappels dans des situations nécessitant l'exécution en série d'actions, par exemple. répertoire d'analyse -> lire les données du fichier -> faire quelque chose avec les données. Ceci est préférable à une imbrication profonde des rappels. Les trois premières sections de l'article suivant sur le blog HowToNode de Tim Caswell en donnent un bon aperçu:
http://howtonode.org/control-flow
Voir également la section Actions séquentielles de la deuxième partie de cette publication:
C'est fondamentalement comme un rappel que express.js utilise après qu'une certaine partie du code est exécutée et terminée, vous pouvez l'utiliser pour vous assurer que cette partie du code est terminée et ce que vous voulez faire ensuite, mais gardez toujours à l'esprit que vous ne pouvez faire qu'un seul res.send
dans votre chaque RESTE bloquer ...
Ainsi, vous pouvez faire quelque chose comme ceci comme un simple exemple de next()
:
app.get("/", (req, res, next) => {
console.log("req:", req, "res:", res);
res.send(["data": "whatever"]);
next();
},(req, res) =>
console.log("it's all done!");
);
C'est aussi très utile lorsque vous souhaitez avoir un middleware dans votre application ...
Pour charger la fonction middleware, appelez app.use (), en spécifiant la fonction middleware. Par exemple, le code suivant charge la fonction de middleware myLogger avant la route vers le chemin racine (/).
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);