我如何修复path,以查找node.js中子文件夹内的视图
我想创build一个本地主机的路由:端口/pipe理/和我想保持routes.js文件和view.js文件在匹配的文件夹,所以我不会有太多spaggeti以后
但我一直得到:500错误:无法查找视图“/pipe理/ manage_subjects”试图创build一个新的路线和使用相同的文件夹几乎一样
我有快递以下查看文件夹
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)
代码:routes / admin / index.js
exports.index = function (req, res) { res.render('manage_subjects',{title:'Express'});}
意见/pipe理/ manage_subjects.jade
extends admin_layout block content h1 = title p Welcome to #{title}
我的app.js代码
/** * 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')); });
我一直在处理我认为是同样的问题,并找出如何解决这个问题。 所以如果有其他人遇到这个问题,我张贴我的解决scheme。
所以这就是我所造成的404和500的
app.js
var routes = require('./routes/index'); var admin = require('./routes/admin'); app.use('/', routes); app.use('/admin', admin);
这里是我的路线/ index.js
//append routes var express = require('express'); var router = express.Router(); router.get('/', function(req, res) { res.render('index', {title: 'Express'}); }); module.exports = router;
和我的路线/ admin.js:
var express = require('express'); var router = express.Router(); router.get('/admin', function(req, res) { res.render('admin/index', {title: 'Express'}); }); module.exports = router;
通过在router.get()函数内部定义第二个/ admin,我想我是有效地告诉节点在我的视图文件夹下面的path视图/ admin / admin / index.ejs中查找html。 所以要解决所有我必须做的是从router.get()或从app.use()/ admin删除/ admin所以我的工作代码现在看起来像这样:
app.js
var routes = require('./routes/index'); var admin = require('./routes/admin'); app.use('/', routes); app.use('/admin', admin); //I left the /admin here and instead removed the one in routes/admin.js
这里是我的路线/ index.js
//append routes var express = require('express'); var router = express.Router(); router.get('/', function(req, res) { res.render('index', {title: 'Express'}); }); module.exports = router;
和我的路线/ admin.js:
var express = require('express'); var router = express.Router(); router.get('/', function(req, res) { //NOTICE THE CHANGE HERE res.render('admin/index', {title: 'Express'}); }); module.exports = router;
所以做了这样的改变,所以我可以有我的视图文件夹中的子文件夹。
我会看看他的video模块化应用程序on his vimeo
TJ的video关于这个工作stream程的最好的部分是你的代码变得非常灵活,很容易保持DRY
。
此外,我会做我的app.set("views")
这样的事情
var path = require("path"); app.set('views', path.join(__dirname, 'views')); // you can then extend this to the example for routes
另一种select就像在你的app.js
文件中:
var express require("express") var app = express() var routes = require("./path/to/routes")(app)
然后路由将如下所示:
routes = function (app) { app.get("/route", middleWareifYou.gotIt, route.handler || function (req, res) { res.send("some msg"); }); }; module.exports = routes
干杯,我希望这有助于!