1

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

我找到了两种将模板作为类似字符串的renderSync()方法获取的方法,但它需要模板在之前或之后作为文件存在,compile()但我不知道如何使它与变量处理一起工作。

4

1 回答 1

1

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

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

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

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

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

templatePath用于两个目的:

  1. 作为节点require缓存的键。如果您多次请求编译相同的文件名,您将获得原始编译。这可能意味着您需要在编辑模板时清除 require 缓存:delete require.cache[templatePath];
  2. 发现自定义 Marko 标签。如果您有打算由电子邮件模板使用的自定义标签/组件,则应确保 指定的路径templatePath 允许发现这些标签
于 2020-09-01T18:34:30.483 回答