问题描述
我将markojs用于我的电子邮件模板,但是现在我们将这些模板移到数据库中以进行在线编辑。 我们仍然需要使用marko来保持完整的HTML结构和变量行为。
我已经找到了两种方法来获取模板,如renderSync()
这样的字符串,但是它需要模板在compile()
之前或与文件一起存在,但是我不知道如何使其与变量处理。
解决方法
您可以使用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
有两个用途:
- 用作节点
require
缓存的键。如果您请求多次编译同一文件名,则将获得原始编译。这可能意味着您在编辑模板时需要清除require缓存:delete require.cache[templatePath];
- 发现自定义Marko标签。如果您有电子邮件模板要使用的自定义标签/组件,则应确保使用
templatePath
allows those tags to be discovered指定的路径。