我正在尝试为localhost创建一个路由:port / admin /
我想在匹配的文件夹中保留routes.js文件和view.js文件,所以我以后不会有太多的spaggeti
但我一直得到:500错误:无法查找视图“/ admin / manage_subjects”
尝试创建一个新的路由,并使用相同的文件夹
我有快递的以下视图文件夹
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)
码:
路线/管理/ index.js
exports.index = function (req, res) {
res.render('manage_subjects',{title:'Express'});}
意见/管理/ 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'));
});
我一直在处理我认为是同样的问题,并想出如何解决它。所以如果其他人遇到这个问题,我就会发布我的解决方案。
所以这就是我所拥有的导致404和500的东西
app.js
var routes = require('./routes/index');
var admin = require('./routes/admin');
app.use('/', routes);
app.use('/admin', admin);
这是我的routes / 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,我想我有效地告诉节点在我的views文件夹中查找以下路径视图/ 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
这是我的routes / 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;
因此,进行更改使得我可以在views文件夹中包含子文件夹。
我会查看TJ关于Modular应用程序的视频 on his vimeo
关于这个工作流程的最好的部分是你的代码变得非常灵活,并且它更容易留下来 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
另一种选择可能是你的 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
干杯,我希望这有帮助!
简单的答案 对于views文件夹中的子文件夹(我的名为frontend)
点击这里图片查看文件夹结构
file app.js
app.set('views', [path.join(__dirname, 'frontend'), path.join(__dirname, 'frontend/locked'), path.join(__dirname, 'frontend/template'), path.join(__dirname, 'frontend/public')]);
app.set('view engine', 'pug')