【问题标题】:how to use both ejs and jade in one nodejs & express project?如何在一个nodejs & express项目中同时使用ejs和jade?
【发布时间】:2013-05-22 21:56:54
【问题描述】:

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

【问题讨论】:

  • 我认为这个答案可能对您有所帮助:stackoverflow.com/a/15064438/1266006
  • 出于好奇,你为什么要这么做?
  • 对于partials,仅仅使用handlerbars来替换变量就足够了,对于复杂的页面,需要一个强大的模板引擎。那要看。我已经弄清楚了,我会分享它
  • 嘿@HenryLeu 你能分享你的智慧吗?我愿意做同样的事情。

标签: node.js express pug ejs


【解决方案1】:

在github上expressjs api docs和consolidate.js很容易找到路

请参考下面的 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 提供了一个 .renderFile() 方法,其签名与 Express 期望的签名相同:(路径、选项、回调),但请注意,它在内部将此方法别名为 ejs.__express,因此如果您使用“. ejs" 扩展,你不需要做任何事情。

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

var engines = require('consolidate');
app.engine('haml', engines.haml);
app.engine('html', engines.hogan);

【讨论】:

  • 但是我不需要在某处使用express.set('view engine', 'ext');吗?
  • @theonlygusti 你能详细说明一下吗?我试图让它工作,但不确定在使用consolidate 时是否需要默认的view engine?我在文档中,因此如果您有指向 ref 的指针,将不胜感激。谢谢。
【解决方案2】:

这适用于我的:

  1. 添加 pug 和 ejs 作为渲染

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 调用渲染。

路线/用户

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;

【讨论】:

  • 感谢您引入新名称 pug。我对这个东西很陌生。您是否对consolidate.js 进行了任何测试?我认为这是我需要采取的路线,因为我正在尝试使用 ejs 向前端提供单个变量。
  • 我用 mocha+assert 做了测试
  • 我查看了consolidate.js,但我能说的最多的是,它不允许我在单个页面上混合渲染方法。由于我已经在使用PUG,所以我走AJAX的路线来获取我的数据。矫枉过正......
  • 这是一个更新的答案,为了正确起见,也许应该更新这个答案
猜你喜欢
  • 2012-09-27
  • 2019-01-28
  • 2013-02-10
  • 2016-11-01
  • 2019-05-04
  • 1970-01-01
  • 1970-01-01
  • 2017-10-23
  • 2022-11-21
相关资源
最近更新 更多