Express 从不同来源编译灰尘模板
我正在尝试使用来自两个不同来源的内容在Express中编译和呈现Dust模板:Express 从不同来源编译灰尘模板,express,dust.js,Express,Dust.js,我正在尝试使用来自两个不同来源的内容在Express中编译和呈现Dust模板: 灰尘文件位于/views目录下 来自外部CDN的字符串响应 我的目标是从CDN接收字符串响应,该响应将包含引用本地存储在/views中的Dust文件的内容。它看起来像这样: "{>layout/} {<content} <h1>Here is the dynamic content that will change based on the CDN request</h1>
"{>layout/}
{<content}
<h1>Here is the dynamic content that will change based on the CDN request</h1>
{<content}"
但是渲染文件会导致错误:
[Error: Template Not Found: layout]
因此,我需要用layout.dust(位于my/views目录中)编译CDN的字符串。执行此操作的最佳方法是什么?您只需自行编译layout.dust,当您渲染CDN模板时,dust将拉入部分布局。您可以让dust从文件系统动态编译模板,如下所示:
dust.onLoad = function (name, callback) {
// Get src from filesystem
fs.readFile('path to template', function (err, data) {
if (err) throw err;
callback(err, data.toString());
});
}
确保您的代码中需要节点fs模块。我以为您是使用本文所示的dust.compile(src,name)函数编译dust模板的。我将在上面研究你的方法。谢谢它在幕后进行编译。此方法意味着您不需要手动编译模板。您只需引用它们,如果它们不在Dust缓存中,Dust将使用
onLoad
获取模板,然后编译它。下次您想要使用它时,它将在缓存中,这样Dust就不需要再次加载和编译它。如果愿意,您可以在应用程序启动时从文件系统加载所有模板,并使用dust.compile
进行编译。结果是一样的。除此之外,如果您想了解其工作原理,请查看源代码中的dust.load
函数。这一切都应该是不言自明的。
dust.onLoad = function (name, callback) {
// Get src from filesystem
fs.readFile('path to template', function (err, data) {
if (err) throw err;
callback(err, data.toString());
});
}