在Nodejs中提交表单后使用flash消息

时间:2017-03-04 01:28:39

标签: javascript node.js express

我只是在用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>

<% } %>

我显然做错了什么都没有发生但是我想重定向然后显示消息,这可能吗?

1 个答案:

答案 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文件添加更多功能,因此决定使用导出。希望这会有所帮助。