我正在为我的项目使用 express-ejs-layout。我的项目有路由。我想对不同的资源查询使用不同的布局。例如,如果查询是:www.xxx.com/a,则使用LayoutA.ejs,如果查询是:www.xxx.com/b,则使用LayoutB.ejs。我的index.js部分代码是:
...
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, '/app_server/views'));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(ejsLayout);
app.use('/public', express.static(path.join(__dirname, 'public')));
require('./app_server/routes/routeManager')(app);
...
我该怎么办?
我刚刚自己解决了问题。我会写给面临同样问题的朋友。
app.get('/a', function(req, res) {
res.render('view', { layout: 'LayoutA' });
});
app.get('/b', function(req, res) {
res.render('view', { layout: 'LayoutB' });
});
这就是我所做的:
首先,我设置默认布局
// app.js
app.set('layout', 'layouts/front') // assuming it's inside the 'views' directory
然后,我对单独的 Router 实例使用中间件:
// app.js
app.use('/admin', AdminRoutes);
在我的
AdminRoutes.js
:
// AdminRoutes.js
const router = express.Router();
router.use((req, res, next) => {
// changing layout for my admin panel
req.app.set('layout', 'layouts/admin');
next();
});
router.get('/', (req, res) => {
res.render('admin/index'); // will use admin layout
});
const path = require('path');
const express = require('express');
const app = express();
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));
app.set('layout', 'layoutsA', 'layoutsB');
const router = require("express").Router();
const expressLayouts = require("express-ejs-layouts");
// user router
router.use(expressLayouts);
router.get('/', (req, res) =>{
res.render("user", {layout: "layoutsA"});
});
const router = require("express").Router();
const expressLayouts = require("express-ejs-layouts");
// post router
router.use(expressLayouts);
router.get('/', (req, res) =>{
res.render("user", {layout: "layoutsB"});
});