模板引擎:包含文件,同时保留父文件中的变量

时间:2019-05-25 13:00:18

标签: javascript node.js express template-engine

我一直在尝试并尝试为节点开发新的模板引擎。

到目前为止,它仍然可以正常工作,但是我试图解决“ include”功能时碰壁了。

这是到目前为止的工作方式:

@{
    var title = "My Title";
}

<title>@title</title>

所有内容都呈现为单个字符串,并立即执行以维护上下文。

创建字符串:

'var title = "My Title";output=\`<title>`+title+`</title>`'

我不喜欢它,但是我无法通过传递每个函数的变量来使eval()正常工作。

问题: 我有一个include函数:

@include('/filename.html')

如果引擎获取文件名,读取文件名并将其放回输出字符串中,则此方法有效。但是我不能像这样将变量传递给函数:

@include(filename + '.html')

因为我必须执行整个页面才能获取filename值。

我考虑过将函数暴露给执行的字符串,例如:

'</title>'+render(filename + '.html')+'<h1...'

但是我不想公开渲染引擎的所有代码。

我尝试用eval()方法控制.call一次执行一个,但是我无法在不暴露js文件中其他所有内容的情况下将变量传递给eval。

output += eval.call({ title: "My Title" }, html);

这是行不通的。

0 个答案:

没有答案