我試圖使用hogan-express編譯一個html電子郵件模板以發送出我的節點應用程序。基本的例子是一個歡迎電子郵件,它向新用戶發送他們的登錄憑證。 html模板非常簡單,只需輸出數據,例如:{{username}}。我遇到的問題是我似乎無法將編譯後的模板作爲html傳遞給nodemailer。如何使用Hogan-Express在Express應用程序中編譯電子郵件模板?
基於robertlkep的真正有用的文章,我已經修改了我的代碼,但仍然無法使事情工作。我可以證實,以下是在app.js文件:
app.set('views', path.join(__dirname, 'views'));
app.engine('html', require('hogan-express'));
app.set('view engine', 'html');
app.set('layout', 'layouts/default');
因此,應用程序使用該引擎的所有意見和它一直工作得很好(不喜歡玉的話)。違規的路線已更改爲以下內容:
var express = require('express');
var router = express.Router();
var User = require('../models/user');
var Report = require('../models/report');
var passport = require("passport");
var localStrategy = require("passport-local").Strategy;
var nodemailer = require('nodemailer');
var smtpTransport = require('nodemailer-smtp-transport');
router.post('/register', function(req, res, next) {
// Registration logic etc
var password = req.body.password;
var email = req.body.email;
var company = req.body.company;
var name = req.body.name;
var role = req.body.role;
req.checkBody('email','Email field is required').notEmpty();
req.checkBody('email','Email not valid').isEmail();
req.checkBody('company','Company field is required').notEmpty();
req.checkBody('name','Name field is required').notEmpty();
var errors = req.validationErrors();
if (errors) {
res.render('register',{
errors: errors,
email: email,
company: company,
name: name,
role: role
});
} else {
var newUser = new User({
email: email,
company: company,
name: name,
password: password,
role: role
});
// Create User
User.createUser(newUser, function(err,user){
if (err) throw err;
var textContent = 'You can log in at with your email address and this password: ' + password;
app.render('emails/welcome', {
layout:"layouts/email",
title: "Email Title",
message:"Main Message",
username: email,
password:password
}, function(err,html) {
if (err) throw err;
console.log(html);
var mailOptions = {
from: 'Test Email <[email protected]>',
to: email,
subject:'Subject',
text: textContent,
html: html
};
var transporter = nodemailer.createTransport(smtpTransport({
host: 'smtp.host.co.uk',
port: 465,
secure:true,
auth: {
user: '[email protected]',
pass: process.env.EMAIL_PASSWORD
}
}));
transporter.sendMail(mailOptions, function(error,info) {
if (error) {
console.log(error);
req.flash('error', "Emailed failed");
res.location('/users');
res.redirect('/users');
} else {
console.log('Message sent: ' + info.response);
// Send flash message
req.flash('success', "New user created");
res.location('/users');
res.redirect('/users');
};
});
});
});
};
});
我去掉了從什麼太具體的,我真的不發送電子郵件了從[email protected]。無論如何,使用這段代碼創建用戶,但html不會記錄到控制檯,應用程序只是掛起。我對Node仍然很陌生,所以我犯了什麼愚蠢的新手錯誤?
真的很感謝你的回答,但我還是不太瞭解。我已經修改了這個問題以包含更多信息和建議。 – Taintedmedialtd
@Taintedmedialtd確實存在你使用它的地方嗎?如果沒有,請使用'res.render()'而不是'app.render()'(儘管我會假設應用程序會因爲使用未定義的變量而崩潰,除非應用程序中的某些內容忽略了異常拋出)。 – robertklep
它是res.render() - 你是王牌,謝謝。 – Taintedmedialtd