我只是在用Node JS / Express提交联系表单后尝试显示引导样式警报。我正在使用ejs模板进行观看
mailerRoutes.js
const nodemailer = require('nodemailer');
const mailer = require('express').Router();
<!-- more mailer config here --->
function sendEmail(req, res) {
transporter.sendMail(mailOptions, function(error, info){
if(error){
req.flash('msg', 'error occurred');
res.locals.messages = req.flash();
}else{
req.flash('msg', 'Successfully sent email');
res.locals.messages = req.flash();
};
res.redirect('/');
});
}
module.exports = mailer;
server.js
const mailerRoutes = require('./routes/mailerRoutes');
app.use(cookieParser('secret'));
app.use(session({
cookie: { maxAge: 60000 },
secret: process.env.SESSION_SECRET || '<mysecret>',
resave: false,
saveUninitialized: false
}));
app.use(flash());
app.use('/changeInfo', mailerRoutes);
app.get('/', function(req, res) {
RugbyClub.count({}, (err, count) => {
if (err) {
res.render('index', { count: [] });
return;
}
res.render('index', { count: count });
});
});
index.ejs
<% if (locals.messages) { %>
<script language="javascript">
alert("<%= messages.msg %>");
</script>
<% } %>
我显然做错了什么都没有发生但是我想重定向然后显示消息,这可能吗?
答案 0 :(得分:0)
您可以将Flash消息提供给请求本地对象,请求对象属性对于公开请求级别信息非常有用。
req.flash("msg","Error Occured");
res.locals.messages = req.flash();
res.redirect('/');
然后将其与您的应用程序逻辑的其余部分一起放在您的视图文件中:
<% if (locals.messages) { %>
<% } %>
在mailRouter.js中可能会尝试这样做:
exports.sendEmail = function(req, res) {
// I hope you had imported the Nodemailer module
transporter.sendMail(mailOptions, function(error, info){
// Put everything else here
最后,更改server.js中的以下行:
app.use('/changeInfo', mailerRoutes);
// To
app.use('/changeInfo', mailerRoutes.sendEmail);
我假设您可能会向mailerRoutes.js文件添加更多功能,因此决定使用导出。希望这会有所帮助。