node.js - 在 Node.js EJS 中使用插值包括

标签 node.js include express ejs

我的 Express 应用正在使用 EJS,我的 View 目录如下所示:

./views
  ./contents
    home.ejs
  ./includes
    header.ejs
    footer.ejs
  layout.ejs

我正在尝试根据我的 routes/index.js 中名为 contents 的局部变量有条件地在我的 layout.ejs View 中加载 home.ejs。该文件如下所示:

/*
 * GET home page.
 */

exports.index = function(req, res){
  res.render('index', { title: 'Home', contents: 'home.ejs' });
};

理想情况下,我可以简单地编写(在 layout.ejs 中):

<% include '/contents' + contents %>

结尾的“内容”是包含要加载的正文的相对路径的局部变量。

但是,可惜的是,EJS 似乎总是按字面意思解释 include 指令之后的文本,并且不可能发生任何插值魔法。

我也试过了,没用:

<% function yieldContent(contents){ %>
  <% var contentPath = 'contents/' + contents; %>
  <% include contentPath %>
<% }; %>
<% loadContent(); %>

有没有人有创造性的解决方案,可以根据路由中传递的变量有条件地包含 View ?

最佳答案

我认为没有办法在 EJS 中进行这种动态包含。它可能会打破业务逻辑和 View 的分离。 解决方案可以是在 Controller 中渲染子模板,并将其内容传递给布局。

要在 Controller 中渲染子模板,请使用以下内容:

var ejs = require('ejs'),
, fs = require('fs')
, home = ejs.render(fs.readFileSync("contents/home.ejs", "utf-8"))

关于node.js - 在 Node.js EJS 中使用插值包括,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11804691/

相关文章:

node.js - 尝试构建应用程序时出现错误 : @babel/helper-plugin-utils/src/index. js : Unexpected token, 预期为 ","(93:5)

node.js - 来自 mongoose 回调的 Express js res.redirect() 不起作用

include - PHP 脚本检测到它是一个包含

c - linux服务器上的编译错误(C项目)

javascript - 如何在 Node 模块和另一个 JavaScript 文件中声明数组 (Mongodb)

javascript - 中间件运行两次

node.js - 如何用 sinon 模拟事件?

c++ - Clang 工具 (libtooling) : set header search path to standard libs headers. 基础框架

node.js - 带有 EventSource 的 Express.js 中的内存泄漏

json - Express:发送 JSON 文件作为响应