2013-05-13 9 views
9

Muszę wysyłać wiadomości e-mail z aplikacji MeteorJS i chcę je generować za pomocą szablonów html, a nie przez "html-in-js" rzeczy.
Co próbowałem zrobić:
1) Użyj Template.emailTemplate(data), ale Template nie jest zdefiniowany po stronie serwera.
2) Zapisz moje szablony wiadomości e-mail jako pliki *.html pod katalogiem <app>/server/email/templates, pobierz ich zawartość, używając fs.readSync(), a następnie skompiluj/wyrenderuj za pomocą wbudowanego pakietu meteorowego handlebars.
To działa dobrze w środowisku programistycznym, ale kończy się niepowodzeniem w produkcji przy użyciu dołączonej aplikacji, ponieważ pliki *.html pod katalogiem server nie są spakowane. Poza tym struktura katalogów zmienia się podczas procesu pakowania, a względne ścieżki do szablonów stają się nieważne.
3) Twoje propozycje? =)MeteorJS: Generowanie wiadomości e-mail z szablonów po stronie serwera

Odpowiedz

14

Obecnie szablony nie są obsługiwane po stronie serwera. Ta funkcjonalność nadchodzi. W międzyczasie stworzyłem pakiet, który można znaleźć przydatne handlebars-server, który pozwala używać Handlebars na serwerze. Możesz użyć pakietu z atmosferą lub kopiując katalog projektu do swojego folderu pakietów. Oto przykład:

przykład:

my-email.handlebars

Hello, {{name}} 

server.js

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

Uwaga

Brak szablonów w pliku kierownicy. Po prostu wpisz swoje wyrażenia html i Handlebars. Plik zostanie skompilowany do funkcji i przypisany do właściwości w obiekcie Handlebars.templates. Nazwa właściwości będzie nazwą pliku pomniejszoną o rozszerzenie kierownicy.

Github

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

+0

Dzięki! Właśnie tego potrzebowałem! – th0r

+0

Czy to jest agnostykiem HTML? To znaczy, czy mogę użyć go również do szablonów tekstowych? Dzięki! – hsribei

4

Inną opcją jest użycie stronie serwera katalogu „prywatny” czytać z zasobów i wykorzystać je do przechowywania zasobów aplikacja będzie używać.

utwórz projekt meteor, a następnie utwórz katalog/private.

Place szablony tam (należy użyć pakietu Meteor-kierownica-serwer zamiast jeśli potrzeba kierownicę)

Czytaj w szablonie z:

Assets.getText(assetPath, [asyncCallback]); 

Oczywiście można też zrobić pasujące do wzorca regex/replace na ciąg po wczytaniu.

przykład:

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

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

Aby uzyskać więcej informacji na temat funkcjonalności aktywów. Meteor Assets

Powiązane problemy