2013-05-13 1 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 на сервере. Вы можете использовать пакет с атмосферой или путем копирования каталога проекта в папку с вашими пакетами. Ниже приведен пример:

Пример:

мои-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

+0

Является ли это HTML-агностиком? То есть, могу ли я использовать его для шаблонов с обычным текстом? Благодаря! – hsribei

4

Другой вариант теперь использовать «частный» каталог на стороне сервера для чтения ресурсов из и использовать их для хранения ресурсов будет использовать приложение.

Создайте проект метеора, а затем создайте каталог/private.

Разместите ваши шаблоны там (Вы должны использовать пакет Метеор-рули-сервера вместо этого, если вам нужно рули)

Читайте в шаблоне с:

Assets.getText(assetPath, [asyncCallback]); 

Очевидно, что вы также можете сделать поиск по шаблону regex/заменить на строку после ее загрузки.

пример:

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

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

Для получения дополнительной информации о функциональных возможностях активов:. Meteor Assets

Смежные вопросы