Express 从不同来源编译灰尘模板

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>

我正在尝试使用来自两个不同来源的内容在Express中编译和呈现Dust模板:

  • 灰尘文件位于/views目录下
  • 来自外部CDN的字符串响应
  • 我的目标是从CDN接收字符串响应,该响应将包含引用本地存储在/views中的Dust文件的内容。它看起来像这样:

    "{>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());
        });
    }