我最近开始在node.js中开发,到目前为止我已经完成了基础知识(路由,身份验证,视图等)。我现在想要更好地组织我的模板,所以我想找到一种基于参数加载部分的方法。
在我的应用中,我有这个;
freeway.get('/login', function(req,res){
res.render('login');
});
我想要的是能够传递一个指向局部的参数并让我的视图渲染它,就像这样;
freeway.get('/login', function(req,res){
res.render('index', {reqpage: "login"});
});
我的索引视图包含我的主模板,主要由硬编码的部分组成(尽管有些显示逻辑,例如用户登录时的用户特定元素)。我想进一步扩展它并动态地从我的应用程序传递到索引视图,而不是让几个基本上重复的模板只有略微不同的内容。
我尝试了以下但没有成功;
1)<%= reqpage %>
2)<% include reqpage %>
3)<% include <%= reqpage %> %>
在任何情况下,它们都会导致应用程序引发错误(意味着找不到部分错误)或将路径呈现为字符串。我甚至试过以下希望它把它解释为代码来渲染部分,但是没有这样的运气;
res.render('index', {reqpage: "<% include login %>"});
任何想法,还是Express + EJS根本没有考虑到这一点?
答案 0 :(得分:1)
由于mscdex(https://github.com/visionmedia/ejs/issues/93)提供的链接,解决方案很简单,但它确实需要您直接编辑EJS lib文件。
为了其他人试图找到解决方案,我在这里解释一下。此代码适用于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应用程序路径中,然后添加一个指向你想要渲染的部分的变量,如下所示;
res.render('index', {reqpage: "login"});
4)最后,在索引视图中(根据此示例),您应该添加标准包含;
<% include reqpage %>
考虑扩展
include
更改为dynamic
,以便您可以轻松识别视图中哪些部分是静态的,哪些部分作为变量传入。< / LI>
醇>
这种变化就像在EJS lib中将其从'include'更改为'dynamic'一样简单。由于EJS检测到“包含”的方式,您无法在不重构代码的情况下使用“include_dyn”(或包含“include”的任何内容)。