2015-05-31 89 views
1

我有一个简单的联系表格使用Node Sendgrid helper library使用电子邮件模板联系表格使用Express/Sendgrid

我想使用编译为HTML并添加正确上下文的模板email/contact.jade。我知道它需要在payload.html的价值,但我坚持如何发送电子邮件的模板。

routes.js

app.route('/contact') 
    .post(function(req, res) { 
    var template = 'email/contact.jade'; 

    var payload = { 
     to: req.body.email, 
     from: '[email protected]', 
     subject: req.body.subject, 
     html: req.body.message 
    }; 

    var email = new sendgridClient.Email(payload); 

    sendgridClient.send(email, function(err, json) { 
     if (err) { 
     return console.error(err); 
     } else { 
     res.redirect('/thanks'); 
     } 
    }); 
    }); 

电子邮件/ contact.jade

p Thanks 
p Name {{ name }} 
p Email {{ email }} 
p Subject {{ subject }} 
p Message {{ message }} 

回答

1

首先我不知道你的玉语法是正确的。你可以代替试试这个:

电子邮件/ contact.jade

p Thanks 
p Name #{name} 
p Email #{email} 
p Subject #{subject} 
p Message #{message} 

而且渲染成HTML这样的:

var jade = require('jade'); 
var templatePath = __dirname + '/contact.jade'; 

app.route('/contact') 
    .post(function(req, res) {  
    var payload = { 
     to: req.body.email, 
     from: '[email protected]', 
     subject: req.body.subject, 
     html: jade.renderFile(templatePath, req.body) 
    }; 
    //... 
    }); 
+0

你说得对玉模板。然而,我必须这样做才能使它工作:var template = fs.readFileSync(__ dirname +'/contact.jade')',因为我一直收到'ENOENT,没有这样的文件或目录' – cusejuice

+1

也只是'html:jade.renderFile(__ dirname +'/contact.jade',req.body)''。使用'renderFile'方法http://jade-lang.com/api/ – cusejuice

+0

是的,'renderFIle'也可以工作,可能会更好,因为它可以让玉更容易缓存模板。我已经编辑了一些答案,将其考虑在内。 –