9

我需要从 MeteorJS 应用程序发送电子邮件,我想使用 html 模板生成它们,而不是通过“html-in-js”的东西。
我尝试做的事情:
1)使用Template.emailTemplate(data),但未Template在服务器端定义。
2)将我的电子邮件模板保存为*.html目录下的<app>/server/email/templates文件,使用获取其内容fs.readSync(),然后使用meteor的内置handlebars包编译/渲染它。
这在开发环境中工作正常,但由于*.html目录下的文件server未捆绑,因此使用捆绑的应用程序在生产中失败。此外,在打包过程中目录结构发生了变化,模板的相对路径变得无效。
3) 你的建议?=)

4

3 回答 3

14

目前,服务器端不支持模板。该功能即将到来。同时,我创建了一个名为handlebars-server 的包,您可能会觉得它很有用,它允许您在服务器上使用Handlebars。您可以使用带有大气的包或将项目目录复制到您的包文件夹中。这是一个例子:

例子:

我的电子邮件.handlebars

Hello, {{name}}

服务器.js

Email.send({
  html: Handlebars.templates['my-email']({ name: 'Chris' })
});

笔记

车把文件中没有模板。只需输入您的 html 和 Handlebars 表达式即可。该文件将被编译成一个函数并分配给 Handlebars.templates 对象上的一个属性。属性名称将是文件名称减去车把扩展名。

Github

https://github.com/eventedmind/meteor-handlebars-server

于 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.*,这是另一种解决方案。

https://gist.github.com/fpoirier1/534bf5db69ece2c83205

于 2014-06-11T19:22:46.793 回答