使用MarkoJS从字符串而不是文件渲染

时间:2020-08-31 09:46:54

标签: templates email-templates marko

我将markojs用于我的电子邮件模板,但是现在我们将这些模板移到数据库中以进行在线编辑。 我们仍然需要使用marko来保持完整的HTML结构和变量行为。

我已经找到了两种方法来获取模板,如renderSync()这样的字符串,但是它需要模板在compile()之前或与文件一起存在,但是我不知道如何使其与变量处理。

1 个答案:

答案 0 :(得分:1)

您可以使用Marko的load方法来编译模板并获取模板实例,然后可以渲染该模板实例以获取最终的HTML:

const template = require("marko").load(templatePath, templateSource, compilerOptions);
const html = template.renderSync(data);

您可能不需要传递任何custom compilerOptions并且可以省略最后一个参数。

即使您的模板在磁盘上不存在,您仍然需要将templatePath传递给带有伪.marko文件的真实目录。例如,您可以这样做:

const templatePath = path.join(__dirname, `${database.id}.marko`);

templatePath有两个用途:

  1. 用作节点require缓存的键。如果您请求多次编译同一文件名,则将获得原始编译。这可能意味着您在编辑模板时需要清除require缓存:delete require.cache[templatePath];
  2. 发现自定义Marko标签。如果您有电子邮件模板要使用的自定义标签/组件,则应确保使用templatePath allows those tags to be discovered指定的路径。