我想在一个nodejs和express项目中,使用ejs来处理局部页面,同时使用jade来处理单独的页面。请问如何实现?
我想在一个nodejs和express项目中,使用ejs来处理局部页面,同时使用jade来处理单独的页面。请问如何实现?
在 expressjs api 文档 和 consolidate.js 的 github 页面上,很容易找到相关的内容。
请参考下面的 express.js 文档片段:
app.engine(ext, callback)
将给定的模板引擎回调函数注册为 ext。默认情况下,将基于文件扩展名使用 require() 引入引擎。例如,如果您尝试呈现一个 "foo.jade" 文件,则 Express 将在内部调用以下内容,并缓存 require() 以增加性能。
app.engine('jade', require('jade').__express);
对于那些没有提供.__express方法的引擎,或者如果您希望将不同的扩展名“映射”到模板引擎,可以使用此方法。例如,将EJS模板引擎映射到“.html”文件:
app.engine('html', require('ejs').renderFile);
在这种情况下,EJS提供了一个与Express期望的相同签名的.renderFile()方法:(路径、选项、回调),但请注意,它在内部将此方法别名为ejs.__express,因此如果您使用“.ejs”扩展名,则无需执行任何操作。var engines = require('consolidate');
app.engine('haml', engines.haml);
app.engine('html', engines.hogan);
express.set('view engine', 'ext');
吗? - theonlygusticonsolidate
时是否需要默认的“视图引擎”?我在文档中,如果您有指针参考,将不胜感激。谢谢。 - tim.rohrer这适用于我:
index.js
const express = require('express');
const path = require('path');
const app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
app.set('view engine', 'ejs');
routes/users
const express = require('express');
const router = express.Router();
router.get('/', function (req, res, next) {
res.render('users.ejs');
});
module.exports = router;
关于路由
const express = require('express');
const router = express.Router();
router.get('/', function (req, res, next) {
res.render('about.pug');
});
module.exports = router;
consolidate.js
,但是据我所知,它不允许我在单个页面上混合渲染方法。既然我已经在使用 PUG
,那么我选择了使用 AJAX 来获取我的数据。可能有点过度设计了... - tim.rohrer