Node.js和Express静态中间件路由视图
这在我看来似乎是一个非常基本的问题,但是我一直没有find答案。
我使用快递与ejs
作为模板引擎和以下目录结构:
|-static |---css |---img |---js |-views
我为static
文件夹定义了static
路由:
app.configure(function(){ app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); app.use(express.bodyParser()); app.use(partials()); app.use(express.methodOverride()); app.use(express.static(__dirname + '/static')); app.use(app.router); app.enable("jsonp callback"); });
在Views
文件夹中,我保留了所有的ejs
文件 – 一个是layout.ejs
,其余的文件是具体页面的实际内容。
我已经定义了以下路线:
app.get('/', function(req,res){ locals.date = new Date().toLocaleDateString(); res.render('home.ejs', locals); }); app.get('/about', function(req,res){ locals.date = new Date().toLocaleDateString(); res.render('about.ejs', locals); }); app.get('/contact', function(req,res){ locals.date = new Date().toLocaleDateString(); res.render('contact.ejs', locals); });
这需要layout.ejs
并将其与页面一起呈现。
很明显,我不想每次添加新页面时添加一个新的路线,我希望它自动完成。
所以我猜它应该与定义另一个app.use(express.static(__dirname + '/views'));
? 也不希望URL显示/about.ejs
而是显示/about
有人能指点我的方向吗?
谢谢 !
例如,您可以编写自己的路由逻辑
function customRouter (req, res, next) { var locals = {}; var controllerName = req.params.controllerName; res.render(controllerName + '.ejs', locals); } app.get('/:controllerName', customRouter);
这是一个简单的例子,但它应该给你一个窍门。 您可以根据自己的需要进行修改。
- 当数据存在于MongoDB中时,返回空数组的API
- MathJax与节点部分
- 如何用node.js / Express 3和Mongoose(MongoDB)组织代码/逻辑
- 在SessionStore中设置Node.js Express会话过期时间而不是cookie
- 如何使用React JS,Redux和Express进行身份validation?
- Node-MySQL – Query()方法中的转义与Mysql.Escape()/ Mysql.EscapeId()
- 通用error handling程序MEANJS,mongoose,温斯顿
- 预加载/预先需要.js路由文件的目录
- Module.Exports不适用于Express