2013-05-13 11 views
9

Devo inviare e-mail dall'applicazione MeteorJS e voglio generarli utilizzando modelli html, non da "html-in-js".
Cosa ho provato a fare:
1) Utilizzare Template.emailTemplate(data), ma Template non è definito lato server.
2) Salvare i miei modelli di email come file *.html nella directory <app>/server/email/templates, ottenere il loro contenuto utilizzando fs.readSync() e quindi compilarlo/renderlo utilizzando il pacchetto integrato di meteor handlebars.
Questo funziona correttamente nell'ambiente di sviluppo, ma non riesce nella produzione utilizzando l'app in bundle a causa dei file *.html nella directory server non raggruppati. Inoltre, la struttura delle directory viene modificata durante il processo di raggruppamento e i percorsi relativi ai modelli diventano non validi.
3) Le vostre proposte? =)MeteorJS: generazione di e-mail dai modelli lato server

risposta

14

Attualmente i modelli non sono supportati lato server. Questa funzionalità sta arrivando. Nel frattempo, ho creato un pacchetto che potreste trovare utile chiamato handlebars-server che consente di utilizzare Handlebars sul server. È possibile utilizzare il pacchetto con atmosfera o copiando la directory del progetto nella cartella dei pacchetti. Ecco un esempio:

Esempio:

my-email.handlebars

Hello, {{name}} 

server.js

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

Nota

Nessun modello nel file manubri. Basta inserire le espressioni html e manubrio. Il file verrà compilato in una funzione e assegnato a una proprietà nell'oggetto Handlebars.templates. Il nome della proprietà sarà il nome del file meno l'estensione del manubrio.

Github

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

+0

Grazie! Questo è esattamente ciò di cui avevo bisogno! – th0r

+0

È indipendente dal codice HTML? Cioè, posso usarlo anche per i modelli di testo semplice? Grazie! – hsribei

4

Un'altra opzione è ora quello di utilizzare la directory lato server 'privato' di leggere le risorse fuori e li usa per memorizzare le risorse della vostra applicazione dovrà usare.

creare il progetto meteor, quindi creare una directory/private.

Posizionare i modelli in là (si dovrebbe usare il pacchetto meteora-manubrio-server invece se avete bisogno di manubrio)

Leggi nel modello con:

Assets.getText(assetPath, [asyncCallback]); 

Ovviamente si può anche fare il pattern matching regex/replace contro la stringa una volta caricata.

esempio:

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

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

Per ulteriori informazioni sulla funzionalità beni:. Meteor Assets