comment puis-je corriger les routes pour trouver des vues à l'intérieur des sous-dossiers dans node.js
je suis en train de créer un itinéraire pour localhost:port/admin/
et je veux garder la routes.js les fichiers et les view.js les fichiers correspondants dans les dossiers, donc je ne vais pas avoir trop de spaggeti plus tard
mais je reçois: 500 Erreur: Échec de la recherche view "/admin/manage_subjects"
pour essayer de créer une nouvelle route et en utilisant les mêmes dossiers peu de la même
j'ai la vue suivante dossier avec express
mainapp(root)
routes(folder)
admin(folder)
index.js(nested inside admin)
index.js(nested inside routes)
views(folder)
admin(folder)
admin_layout.jade(nested inside admin)
manage_subjects.jade(nested inside admin)
index.jade(nested inside views)
layout.jade(nested inside views)
code:
routes/admin/index.js
exports.index = function (req, res) {
res.render('manage_subjects',{title:'Express'});}
views/admin/manage_subjects.jade
extends admin_layout
block content
h1 = title
p Welcome to #{title}
mon app.js code
/**
* Module dependencies.
*/
var express = require('express')
, routes = require('./routes')
, admin_routes = require('./routes/admin/')
, user = require('./routes/user')
, http = require('http')
, path = require('path')
, repository = new (require('./domain_model/repository'))();
var app = express();
//all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
//development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
//fill local subjects
repository.subjects.GetAll(function (err, data) {
if (err) throw err;
app.locals.subjects = data;
});
//append routes
app.get('/', routes.index);
app.get('/admin', admin_routes.index);
app.get('/users', user.list);
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on http://localhost:' + app.get('port'));
});
dans routes/admin/index.js il semble qu'il devrait être
je l'ai essayé, ne fonctionne pas 🙁
res.render('admin/manage_subjects',{title:'Express'});}
je l'ai essayé, ne fonctionne pas 🙁
OriginalL'auteur user2538720 | 2013-07-02
Vous devez vous connecter pour publier un commentaire.
J'ai du faire avec ce que je pense est le même problème et a trouvé comment résoudre le problème. Donc, au cas où quelqu'un d'autre vient à travers ce problème, je vais poster ma solution.
Voici donc ce que j'avais qui était à l'origine 404 et 500
app.js
et voici mon routes/index.js
et mon routes/admin.js:
par la définition de la seconde /admin à l'intérieur du routeur.get() fonction que je pense que j'ai effectivement dire nœud de chercher le code html de mon point de vue dossier dans le répertoire views/admin/admin/index.ejs. Donc, pour corriger que tout ce que j'avais à faire était de supprimer le /admin du routeur.get() ou le /admin partir de l'application.usage()
Donc mon code de travail ressemble maintenant à ceci:
app.js
et voici mon routes/index.js
et mon routes/admin.js:
Afin de faire de ce changement afin que je puisse avoir des sous-dossiers dans mon dossier vues.
merci!!!! c'est parfait.cela devrait être la réponse.
OriginalL'auteur
J'avais découvrez TJ vidéo Modulaire des applications
sur son vimeo
la meilleure partie de ce flux de travail est votre code devient vraiment très souple et il est beaucoup plus facile de resterDRY
.En outre, je voudrais faire quelque chose comme ça avec mon
app.set("views")
Une autre alternative serait quelque chose comme dans votre
app.js
fichier:et ensuite les routes ressemblerait à:
Encouragements, j'espère que cela aide!
OriginalL'auteur