我想将 ejs 用于部分页面,并将 jade 用于各个页面,如何在一个nodejs&中使用它们。表达项目?
答案 0 :(得分:10)
在expressjs api docs和consolidate.js github上找到方法很容易
请参考下面的express.js doc片段,
app.engine(分机,回拨)
将给定的模板引擎回调注册为ext默认情况下,将根据文件扩展名要求()引擎。例如,如果您尝试呈现“foo.jade”文件,Express将在内部调用以下内容,并在后续调用中缓存require()以提高性能。
app.engine('jade', require('jade').__express);
对于不提供.__表示开箱即用的引擎 - 或者如果您希望“映射”不同的扩展名到模板引擎,您可以使用此方法。例如,将EJS模板引擎映射到“.html”文件:
app.engine('html', require('ejs').renderFile);
在这种情况下,EJS提供了一个.renderFile()方法,其具有与Express期望的相同的签名:(路径,选项,回调),但请注意,它将此方法别名为ejs .__ express in internal,如果您正在使用“。 ejs“你不需要做任何事情的扩展。
某些模板引擎不遵循此约定,创建了consolidate.js库以映射所有节点的流行模板引擎以遵循此约定,从而允许它们在Express中无缝地工作。
var engines = require('consolidate');
app.engine('haml', engines.haml);
app.engine('html', engines.hogan);
答案 1 :(得分:4)
这适用于我:
<强> 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');
<强>路由/用户
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;