Un Exemple Les Débutants
J'aime l'objet d'une réponse, mais c'est raté pour les débutants qui veulent voir un simple exemple. Voici ce que j'aurais aimé avoir vu quelqu'un me montrer.
Prenons un scénario typique où vous utilisez express et que vous avez beaucoup de routes figurant sur votre app.js fichier. Son contenu devrait ressembler à quelque chose comme ceci:
app.js
// ... startup code omitted above
app.get('/', function(req, res) {
res.render('index', { title : 'home' });
});
app.get('/contactus', function(req, res) {
res.render('contactus', { title : 'contact us' });
});
app.get('/anotherpage', function(req, res) {
res.render('anotherpage', { title : 'another page' });
});
// and so on...
Vous pouvez imaginer si vous avez 50 pages, ce fichier peut être tout à fait hors de la main. Il serait bon de supprimer certains de ces interruptions de la app.js fichier.
Ce que vous voulez faire est de créer un "contrôleurs" dans le dossier de votre application de sorte que votre structure serait maintenant ressembler à ceci:
app.js
/controllers
Créer un fichier dans "/controllers" nommé "index.js" puis placez le code suivant.
/controllers/index.js
module.exports.set = function(app) {
// copy your routes listed in your app.js directly into here
}
Couper et coller votre itinéraire inscriptions à partir de votre "app.js" fichier et le placer dans "/controllers/index.js" fichier.
Sur votre app.js fichier, supprimez votre parcours et à la place de faire le suivant.
app.js
// remove your routes and replace with this code
var controllers = require('./controllers');
controllers.set(app);
Maintenant, si vous voulez avoir votre "/controllers/index.js" fichier peut également être scindée, nous allons ajouter un exemple de plus de sorte que vous pouvez voir comment Node.js vraiment agit comme une Poupée russe dans la façon dont son code peut être organisé.
Dans "/controllers" ajouter un fichier "accounts.js" et placer celui-ci en son sein.
/controllers/account.js
module.exports.set = function(app) {
// put more app route listings here
}
Maintenant dans votre "/controllers/index.js fichier, mettre une référence à "account.js"
/controllers/index.js
var account = require('./account.js');
module.exports.set = function(app) {
// your routes here
// let "account.js" set other routes
account.set(app);
}
Comme vous pouvez l'imaginer, vous pouvez garder la rupture des choses en plus petits et de plus petites pièces et mettre plus de dossiers dans des dossiers et de la référence à "exiger" si vous le souhaitez. Vous pouvez utiliser la même notion de "/lib" ou les fichiers de bibliothèque. "node_modules" est déjà cela.
C'est juste une des nombreuses raisons node.js est très agréable à programmer avec.
Mise à JOUR
Parce que j'ai utilisé l'exemple ci-dessus, j'ai voulu modifier le présent avec quelque chose que j'ai commencé à le faire quand il y a des tonnes de routes qui est assez efficace. Bien que cet exemple est bon à démontrer la poupée russe concept de maintenabilité avec "besoin", je voulais aussi ajouter que je suis en utilisant un concept avec un seul fichier de route de l'utiliser avec "besoin" et un fichier séparé(s) pour le contrôleur(s). La raison pour cela est que je peut utiliser le même contrôleur à plusieurs reprises par des voies différentes, donc mon "main" du code pour lier les deux, c'est juste une boucle for qui est plus simple. Par exemple:
/controllers
index.js (has controllers mapped in a lookup object)
routes.js (maps routes to controllers as a string lookup)
Au sein de routes.js ses comme
module.exports = [
{ path : '/', method : 'home' },
{ path : '/faq', method : 'content' },
{ verb : 'post', path : '/contact-us', method : 'contactus' },
{ path : /-lb$/, method : 'lightbox' },
{ path : '/customize', method : 'landing' },
// etc (very long)
Au sein de index.js
var controllers = {};
// add controllers as needed
controllers.home = function(req, res) {
// code
};
controllers.content = function(req, res) {
// code
};
controllers.contactus = function(req, res) {
// code
};
// etc
// you could also have another file for more controllers like so:
// require('./account.js').set(controllers);
// then after declaring controllers, loop through routes to bind them
var i, verb;
for(i = 0; i < routes.length; i++) {
verb = (routes[i].verb) ? routes[i].verb : 'get';
app[verb](routes[i].path, controllers[routes[i].method]);
}
Vous pourriez quand même avoir vos contrôleurs de rompre avec "l'exigent" etc, mais je voulais juste montrer aux gens ce pour les routes que c'est agaçant quand il devient grand dans tous les sens.