2013-05-13 64 views
9

我需要從MeteorJS應用程序發送電子郵件,我想用html模板生成它們,而不是通過「html-in-js」東西。
我試過的做法:
1)使用Template.emailTemplate(data),但Template沒有在服務器端定義。
2)將我的電子郵件模板保存爲*.html目錄下的文件<app>/server/email/templates,使用fs.readSync()獲取它們的內容,然後使用流星內置的handlebars包進行編譯/渲染。
這在開發環境中可以正常工作,但由於*.html文件在server目錄下的文件沒有捆綁在一起,因此使用捆綁應用的生產失敗。此外,目錄結構在捆綁過程中發生變化,模板的相對路徑變得無效。
3)您的建議? =)MeteorJS:從模板生成電子郵件服務器端

回答

14

目前,服務器端不支持模板。該功能即將到來。同時,我創建了一個你可能會發現有用的叫做handlebars-server的包,它允許你在服務器上使用Handlebars。您可以在氣氛中使用軟件包,或將項目目錄複製到軟件包文件夾中。下面是一個例子:

實施例:

MY-email.handlebars

Hello, {{name}} 

server.js

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

注意事項

句柄文件中沒有模板。只需把你的html和Handlebars表達式。該文件將被編譯成一個函數並分配給Handlebars.templates對象上的一個屬性。屬性名稱將是文件名稱減去句柄擴展名。

Github上

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

+0

謝謝!這正是我需要的! – th0r 2013-05-15 07:12:03

+0

是HTML的不可知論?也就是說,我可以將它用於純文本模板嗎?謝謝! – hsribei 2014-08-29 15:59:29

4

另一種選擇,現在是使用服務器端的「私人」目錄中讀取出的資源,並利用它們來存儲您的應用程序將使用資源。

創建meteor項目,然後創建一個/ private目錄。

Assets.getText(assetPath, [asyncCallback]); 

很明顯,你也可以做模式匹配:

將您在那裏的模板中的模板,(你應該使用流星車把-server軟件包,而是如果你需要把手)

閱讀正則表達式/加載後替換字符串。

例如:

var template = Assets.getText(assetPath); // Synchronous 
var username = 'John Doe'; 

template = template.replace('{{username}}', username); 
Email.send({ 
    html: template 
}); 

有關資產功能的詳細信息:Meteor Assets