Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Express/Sendgrid为联系人表单使用电子邮件模板_Javascript_Node.js_Express_Pug_Sendgrid - Fatal编程技术网

Javascript 使用Express/Sendgrid为联系人表单使用电子邮件模板

Javascript 使用Express/Sendgrid为联系人表单使用电子邮件模板,javascript,node.js,express,pug,sendgrid,Javascript,Node.js,Express,Pug,Sendgrid,我有一个简单的联系方式使用 我想使用一个模板email/contact.jade,它可以编译成HTML并添加正确的上下文。我知道它需要输入payload.html值,但是我一直在思考如何使用模板发送电子邮件 routes.js app.route('/contact') .post(function(req, res) { var template = 'email/contact.jade'; var payload = { to: req.body.emai

我有一个简单的联系方式使用

我想使用一个模板
email/contact.jade
,它可以编译成HTML并添加正确的上下文。我知道它需要输入
payload.html
值,但是我一直在思考如何使用模板发送电子邮件

routes.js

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

    var payload = {
      to: req.body.email,
      from: 'example@example.com',
      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');
      }
    });
  });
电子邮件/联系方式。jade

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

首先,我不确定你的jade语法是否正确。您可以尝试以下方法:

电子邮件/联系方式。jade

p Thanks
p Name {{ name }}
p Email {{ email }}
p Subject {{ subject }}
p Message {{ message }}
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: 'example@example.com',
      subject: req.body.subject,
      html: jade.renderFile(templatePath, req.body)
    };
    //...
  });

关于玉模板,你是对的。然而,为了让它正常工作,我必须这样做:
var template=fs.readFileSync(\uu dirname+'/contact.jade')
,因为我一直在得到“enoint,没有这样的文件或目录”,我也可以只做
html:jade.renderFile(\uu dirname+'/contact.jade',req.body)
。使用
renderFile
方法Yes,
renderFile
也可以工作,而且可能更好,因为它使jade更容易缓存模板。为了考虑这一点,我对我的答案进行了一些编辑。谢谢,这非常有帮助。我猜您不需要
fs
库或
var模板='email/contact.jade'
语句。我已经进一步整理了答案。如果您认为这有帮助,请将投票/标记为答案,以便其他人看到:)