我需要从MeteorJS应用程序发送电子邮件,我想使用html模板生成它们,而不是通过“html-in-js”来生成它们。
我试图做的事:
1)使用Template.emailTemplate(data)
,但Template
未在服务器端定义
2)将我的电子邮件模板保存为*.html
目录下的<app>/server/email/templates
文件,使用fs.readSync()
获取其内容,然后使用meteor的内置handlebars
包进行编译/渲染。 />
这在开发环境中工作正常,但由于*.html
目录下的server
文件未捆绑,因此使用捆绑应用程序无法生产。此外,在捆绑过程中更改目录结构,模板的相对路径变为无效
3)你的提议? =)
答案 0 :(得分:14)
目前,服务器端不支持模板。这个功能即将到来。与此同时,我创建了一个名为handlebars-server的软件包,它允许您在服务器上使用Handlebars。您可以使用包含大气的包或将项目目录复制到packages文件夹中。这是一个例子:
<强> 实施例 强>
我-email.handlebars 强>
Hello, {{name}}
<强> server.js 强>
Email.send({
html: Handlebars.templates['my-email']({ name: 'Chris' })
});
注意强>
手柄文件中没有模板。只需输入你的html和Handlebars表达式。该文件将被编译为函数并分配给Handlebars.templates对象上的属性。属性名称将是文件名减去车把扩展名。
<强> Github上强>
答案 1 :(得分:4)
现在的另一个选择是使用服务器端的“私有”目录来读取资源,并使用它们来存储应用程序将使用的资源。
创建meteor项目,然后创建一个/ private目录。
将模板放在那里(如果你需要把手,你应该使用meteor-handlebars-server包)
使用以下方式阅读模板
Assets.getText(assetPath, [asyncCallback]);
显然你也可以在加载后对字符串进行模式匹配regex / replace。
示例:
var template = Assets.getText(assetPath); // Synchronous
var username = 'John Doe';
template = template.replace('{{username}}', username);
Email.send({
html: template
});
有关资产功能的更多信息:Meteor Assets
答案 2 :(得分:1)
Meteor 0.8。*,这是另一种解决方案。