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
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
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
Meteor 0,8 *, tutaj jest inne rozwiązanie.
Dzięki! Właśnie tego potrzebowałem! – th0r
Czy to jest agnostykiem HTML? To znaczy, czy mogę użyć go również do szablonów tekstowych? Dzięki! – hsribei