MeteorJS:从模板服务器端生成电子邮件
我需要从MeteorJS应用程序发送电子邮件,我想使用HTML模板生成它们,而不是“html-in-js”的东西。
我试过的:
1)使用Template.emailTemplate(data)
,但Template
没有定义服务器端。
2)将我的电子邮件模板保存为<app>/server/email/templates
目录下的*.html
文件,使用fs.readSync()
获取它们的内容,然后使用meteor的内置handlebars
包进行编译/渲染。
这在开发环境中工作正常,但由于server
目录下的*.html
文件没有捆绑在一起,所以在使用捆绑应用程序的生产中失败。 另外,在捆绑过程中,目录的结构发生了变化,模板的相对path变得无效。
3)你的build议? =)
目前,服务器端不支持模板。 该function即将到来。 同时,我创build了一个你可能会觉得有用的名为handlebars-server的包,它允许你在服务器上使用Handlebars。 您可以使用包的气氛,或通过复制项目目录到您的包文件夹。 这里是一个例子:
例:
我-email.handlebars
Hello, {{name}}
server.js
Email.send({ html: Handlebars.templates['my-email']({ name: 'Chris' }) });
注意
句柄文件中没有模板。 只要把你的html和Handlebarsexpression式。 该文件将被编译成一个函数并分配给Handlebars.templates对象上的一个属性。 属性名称将是文件的名称减去句柄扩展名。
Github上
现在的另一种select是使用服务器端的“private”目录来读取资源,并使用它们来存储应用程序将使用的资源。
创buildmeteor项目,然后创build一个/ private目录。
把你的模板放在那里(如果你需要把手,你应该使用meteor-handlebars-server包)
阅读您的模板:
Assets.getText(assetPath, [asyncCallback]);
显然,你也可以在加载之后,对string进行模式匹配正则expression式/replace。
例:
var template = Assets.getText(assetPath); // Synchronous var username = 'John Doe'; template = template.replace('{{username}}', username); Email.send({ html: template });
有关资产function的更多信息: meteor资产
meteor0.8。*,这里是另一个解决scheme。