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