Dernière mise à jour
Les multiples dossiers fonction d'affichage est pris en charge par le cadre depuis express 4.10
Il suffit de passer un tableau d'emplacements à la propriété views
, comme ainsi.
app.set('views', [__dirname + '/viewsFolder1', __dirname + '/viewsFolder2']);
Express 2.0
Pour autant que je sais exprimer ne prend pas en charge plusieurs chemins de vue ou namespaces au moment (comme le middleware statique faire)
Mais vous pouvez modifier la recherche logique vous afin que cela fonctionne comme vous le souhaitez, par exemple:
function enableMultipleViewFolders(express) {
// proxy function to the default view lookup
var lookupProxy = express.view.lookup;
express.view.lookup = function (view, options) {
if (options.root instanceof Array) {
// clones the options object
var opts = {};
for (var key in options) opts[key] = options[key];
// loops through the paths and tries to match the view
var matchedView = null,
roots = opts.root;
for (var i=0; i<roots.length; i++) {
opts.root = roots[i];
matchedView = lookupProxy.call(this, view, opts);
if (matchedView.exists) break;
}
return matchedView;
}
return lookupProxy.call(express.view, view, options)
};
}
vous permettra à la nouvelle logique par Callin g la fonction ci-dessus et passer expriment comme paramètre, et vous serez en mesure de spécifier un tableau de vues à la configuration:
var express = require('express');
enableMultipleViewFolders(express);
app.set('views', [__dirname + '/viewsFolder1', __dirname + '/viewsFolder2']);
Ou, si vous préférez, vous pouvez patcher le cadre directement (mise à jour le view.js fichier à l'intérieur)
Cela devrait travail express 2.x, pas sûr que ce sera avec la nouvelle version (3.x)
MISE à JOUR
Serve la solution ci-dessus ne fonctionnera pas dans 3.x express depuis express.view serait non définie
Une autre solution possible sera de proxy la réponse .rendre la fonction et définir la configuration du dossier de vues jusqu'à ce qu'il obtienne un match:
var renderProxy = express.response.render;
express.render = function(){
app.set('views', 'path/to/custom/views');
try {
return renderProxy.apply(this, arguments);
}
catch (e) {}
app.set('views', 'path/to/default/views');
return renderProxy.apply(this, arguments);
};
Je ne l'ai pas testé, il se sent très hacky pour moi en tout cas, malheureusement cette fonction a été repoussée à nouveau: https://github.com/visionmedia/express/pull/1186
MISE à JOUR 2
Cette fonctionnalité a été ajoutée express 4.10, étant donné que la demande de traction suivante a été fusionné: https://github.com/strongloop/express/pull/2320
Quelque chose comme ceci fonctionnerait pour vous? http://stackoverflow.com/questions/9470466/node-express-js-overriding-where-to-look-for-the-views-folder-for-each-reque –
http://stackoverflow.com/questions/ 36374424/mean-app-with-admin-panneau-et-client-panel? Answertab = actif # tab-top –