5

我想将ejs用于局部,将翡翠用于单个页面,如何在一个 nodejs 和 express 项目中同时使用?

4

2 回答 2

10

在 github的expressjs api docsconsolidate.js中很容易找到方法

请参考下面的 express.js 文档片段


app.engine(ext, 回调)

将给定的模板引擎回调注册为 ext 默认情况下将 require() 基于文件扩展名的引擎。例如,如果您尝试渲染“foo.jade”文件,Express 将在内部调用以下内容,并在后续调用中缓存 require() 以提高性能。

app.engine('jade', require('jade').__express);

对于不提供 .__express 开箱即用的引擎 - 或者如果您希望将不同的扩展“映射”到模板引擎,您可以使用此方法。例如将 EJS 模板引擎映射到“.html”文件:

app.engine('html', require('ejs').renderFile);

在这种情况下,EJS 提供了一个 .renderFile() 方法,其签名与 Express 期望的相同:(路径、选项、回调),但请注意,它在内部将此方法别名为 ejs.__express,因此如果您使用“.ejs”扩展名你不需要做任何事情。

一些模板引擎不遵循这个约定,创建了 consolidate.js 库来映射所有节点流行的模板引擎以遵循这个约定,从而允许它们在 Express 中无缝工作。

var engines = require('consolidate');
app.engine('haml', engines.haml);
app.engine('html', engines.hogan);
于 2013-08-10T12:16:40.287 回答
4

这适用于我:

  1. 添加pugejs作为渲染

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');
  1. 使用 filename.fileext 调用 render。

路线/用户

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;
于 2018-02-24T09:09:29.857 回答