从参数加载部分

我最近开始在node.js中开发,到目前为止,我已经掌握了基础知识(路由,authentication,视图等)。 我现在想组织我的模板更好一点,所以我想find一种方法来加载一个基于参数的部分。

在我的应用程序中,我有这个;

freeway.get('/login', function(req,res){ res.render('login'); }); 

我想要的是能够传递一个参数,指向一个部分,并让我的视图渲染它,像这样;

 freeway.get('/login', function(req,res){ res.render('index', {reqpage: "login"}); }); 

我的索引视图保存我的主要模板,它主要由硬编码的部分组成(尽pipe有些用户login时有一些显示逻辑,如用户特定的元素)。 我想进一步扩展,并dynamic地从我的应用程序传递到索引视图,而不是有几个基本上重复的模板只有轻微变化的内容。

我尝试了以下,但没有成功。

1) <%= reqpage %>

2) <% include reqpage %>

3) <% include <%= reqpage %> %>

在任何情况下,它们要么导致应用程序引发错误(意味着未find部分),要么将path呈现为string。 我甚至尝试过下面这个希望它把它解释为代码来expression一个部分,但唉,没有这样的运气;

 res.render('index', {reqpage: "<% include login %>"}); 

任何想法,或者是Express + EJS根本就没有devise这个想法?

感谢mscdex提供的链接( https://github.com/visionmedia/ejs/issues/93 ),解决scheme很简单,但它确实需要您直接编辑EJS库文件。

为了别人试图find解决办法,我在这里解释一下。 该代码适用于EJS 1.0.0版本。

1)在215行的node_modules\ejs\ejs.js中,需要添加以下内容:

 if(options[name]) var path = resolveInclude(options[name], filename); else 

else之后的行会读取var path = resolveInclude(name, filename);

2)在163行的node_modules\ejs\lib\ejs.js中,应该添加与上面相同的代码。

3)在你的node.js应用程序path中,然后添加一个指向你想要渲染的部分的variables。

 res.render('index', {reqpage: "login"}); 

4)最后,在你的索引视图(按照这个例子),你应该添加一个标准的包含这样;

 <% include reqpage %> 

考虑扩大

  1. 也许可以考虑在EJS中复制整个未修改的代码函数,并将其从include更改为dynamic ,以便您可以轻松识别哪些部分在您的视图中是静态的,哪些是作为variables传入的。

这个改变就像在EJS库里把它从'include'改成'dynamic'一样简单。 由于EJS检测“包含”的方式,您不能使用“include_dyn”(或其中包含“include”的任何内容)而不重构代码。