291 votes

Comment inclure la route des gestionnaires dans plusieurs fichiers en Express

Dans mon node.js express application j'ai app.js qui a un peu de routes. Puis dans un wf.js fichier je voudrais définir un peu plus d'itinéraires. Comment puis-je obtenir app.js reconnaître l'itinéraire d'autres gestionnaires qui ont été définis dans wf.js fichier? Un simple besoin ne semble pas fonctionner.

461voto

BFil Points 6420

Cochez cette officiel de l'exemple:

https://github.com/visionmedia/express/tree/master/examples/route-separation

MODIFIER

Si vous voulez mettre des itinéraires dans un fichier séparé, par exemple routes.js

Vous pouvez créer l'routes.js fichier de cette façon

module.exports = function(app){

    app.get('/login', function(req, res){
        res.render('login', {
            title: 'Express Login'
        });
    });

    //other routes..
}

Et puis vous pouvez exiger de app.js en passant l'objet d'application de cette façon:

require('./routes')(app);

108voto

Sam Corder Points 3196

Bâtiment sur @ShadowCloud 'exemple, j'ai été en mesure d'inclure de manière dynamique tous les itinéraires dans un sous-répertoire.

routes/index.js

var fs = require('fs');

module.exports = function(app){
    fs.readdirSync(__dirname).forEach(function(file) {
        if (file == "index.js") return;
        var name = file.substr(0, file.indexOf('.'));
        require('./' + name)(app);
    });
}

Placer ensuite la route des fichiers dans le parcours de répertoire comme suit:

routes/test1.js

module.exports = function(app){

    app.get('/test1/', function(req, res){
        //...
    });

    //other routes..
}

De répéter que pour le nombre de fois que j'ai besoin et enfin dans app.js placer

require('./routes')(app);

22voto

infinity1975 Points 51

Plein récursive de routage de tous .js fichiers à l'intérieur de /itinéraires dossier, mettez-le en app.js.

// Initialize ALL routes including subfolders
var fs = require('fs');
function recursiveRoutes(folderName) {
    fs.readdirSync(folderName).forEach(function(file) {

        var fullName = path.join(folderName, file);
        var stat = fs.lstatSync(fullName);

        if (stat.isDirectory()) {
            recursiveRoutes(fullName);
        } else if (file.toLowerCase().indexOf('.js')) {
            require('./' + fullName)(app);
            console.log("require('" + fullName + "')");
        }
    });
}
recursiveRoutes('routes'); // Initialize it

dans /itinéraires de vous mettre whatevername.js et initialiser vos routes, comme ceci:

module.exports = function(app) {
    app.get('/', function(req, res) {
        res.render('index', { title: 'index' });
    });

    app.get('/contactus', function(req, res) {
        res.render('contactus', { title: 'contactus' });
    });
}

21voto

Brad Proctor Points 338

Et construire encore plus sur la réponse précédente, cette version de routes/index.js va ignorer tous les fichiers se terminant par .js (et lui-même)

var fs = require('fs');

module.exports = function(app) {
    fs.readdirSync(__dirname).forEach(function(file) {
        if (file === "index.js" || file.substr(file.lastIndexOf('.') + 1) !== 'js')
            return;
        var name = file.substr(0, file.indexOf('.'));
        require('./' + name)(app);
    });
}

5voto

regretoverflow Points 608

Un tweak pour toutes ces réponses:

var routes = fs.readdirSync('routes')
      .filter(function(v){
         return (/.js$/).test(v);
      });

Il suffit d'utiliser un regex pour filtrer via l'analyse de chaque fichier dans le tableau. Il n'est pas récursive, mais il va filtrer les dossiers qui n'ont pas de fin .js

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X