2012-11-13 6 views

risposta

26

si può provare il seguente:

var jade = require('jade'), 
    fs = require('fs'); 

fs.readFile('template.jade', 'utf8', function (err, data) { 
    if (err) throw err; 
    console.log(data); 
    var fn = jade.compile(data); 
    var html = fn({name:'Oleg'}); 
    console.log(html); 
}); 

Dove template.jade è il percorso del modello. Ed è simile a questa:

!!! 
html 
    head 
    title= 'Hello world' 
    body 
    p Hello #{name}! 

Quindi si passa il vostro modello come input della funzione fn(), e l'uscita di esso sarà l'html.

<!DOCTYPE html><html><head><title>Hello world</title></head><body><p>Hello Oleg!</p></body></html> 
+2

e vi consiglio di https://github.com/andris9/Nodemailer di inviare messaggi di posta elettronica –

+0

grazie, tutto funziona perfettamente –

+0

È possibile utilizzare [app.render] (http://expressjs.com/api. html # app.render) per eseguire il rendering di un modello su una stringa, come indicato in [this] (http://stackoverflow.com/questions/15403791/in-express-js-app-render-vs-res-render-whats -the-difference # answer-15404507) risposta più recente. –

12

Inoltre si può prendere la stringa da rendere callback (esprimere esempio)

exports.test1 = function(req, res){ 
    res.render('test1', { title: 'test1' }, function(err, body) { 
    console.log(body); 
    }); 

    res.send('wooo'); 
}; 

test1.jade

div 
    = title 
p hello world! 
1

Le risposte tutto il lavoro per il caricamento del modello di giada e compilarlo a HTML usando i locali. Tuttavia, se invii email HTML devi essere consapevole che la maggior parte dei client elimina tutte le classi CSS. Usa Juice (o qualcosa di simile) per applicare tutte le classi CSS in linea.

6

L'apertura del modello con fs.readFile() non è più necessaria. L'API Jade include il metodo compileFile() che viene compilato direttamente da un file.

var jade = require("jade"); 

var locals = {name: "Linus"}, 
    render = jade.compileFile('template.jade'), 
    html = render(locals); 

L'API Jade include anche il metodo renderFile() che restituisce direttamente una stringa HTML da un dato file, il che rende ancora più semplice.

var jade = require("jade"); 

var locals = {name: "Linus"}, 
    html = jade.renderFile('template.jade', locals); 
+1

corretto. Ecco una domanda pertinente su come controllare gli errori: http://stackoverflow.com/questions/7283896/how-can-i-catch-a-rendering-error-missing-template-in-node-js-using- express-js/34709515 # 34709515 – Wtower

+0

quale versione di giada è quella? my renderFile (v1.2.0) si aspetta 3 argomenti – akcasoy

+0

@akcasoy Questi sono i documenti più attuali: http://jade-lang.com/api/. La descrizione 'renderFile()' è in fondo e mostra che sono richiesti 2 argomenti. – Nocturno

Problemi correlati