从param加载部分

时间:2014-06-04 20:45:53

标签: node.js express ejs

我最近开始在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根本没有考虑到这一点?

1 个答案:

答案 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 %>

考虑扩展

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

    这种变化就像在EJS lib中将其从'include'更改为'dynamic'一样简单。由于EJS检测到“包含”的方式,您无法在不重构代码的情况下使用“include_dyn”(或包含“include”的任何内容)。