express-ejs-layout 使用不同的布局

问题描述 投票:0回答:3

我正在为我的项目使用 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);
...

我该怎么办?

javascript node.js express ejs
3个回答
8
投票

我刚刚自己解决了问题。我会写给面临同样问题的朋友。

app.get('/a', function(req, res) {
res.render('view', { layout: 'LayoutA' });
});
app.get('/b', function(req, res) {
  res.render('view', { layout: 'LayoutB' });
});

2
投票

这就是我所做的:

首先,我设置默认布局

// 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
});

1
投票
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"});
});

© www.soinside.com 2019 - 2024. All rights reserved.