0

I am following a tutorial of how to creat a blogapp using expressjs, mongoDB and handlebars. The instructor uses req.flash() in a req.redirect command and it works for him, but when I try it, my page does not display the message. The problem is that when I use req.flash(type, message) with req.render it works perfectly, but my page does not reload as I need. If I check the flash message calling it on a console log it shows me message.

// Session
app.use(session({
secret: 'secret',
resave: true,
saveUninitialized: true,
cookie: {secure: true}
}));
app.use(flash());
// Middleware
app.use((req, res, next) =\> {
res.locals.success_msg = req.flash(('success_msg')\[0\]);
res.locals.error_msg = req.flash(("error_msg")\[0\]);
next();
});

adminRouter.post('/categories/delete', async (req, res) =\> {
try {
const { id } = req.body;
await Category.deleteOne({\_id: id });
req.flash('success_msg', 'Category deleted successfully');
res.redirect("/admin/categories");
} catch (err) {
req.flash('error_msg', `Error to delete category: ${err}`);
res.redirect('admin/categories');
}
})
my render:
{{#if success_msg}}
\<div class="alert alert-success"\>{{success_msg}} \</div\>

{{else if error_msg}}
\<div class="alert alert-danger"\> {{error_msg}}  \</div\>
{{/if}}

1 Answers1

0

I found the error after reading this article

My problem was the session setup. This was my solution:

// Session
var sessionStore = new session.MemoryStore;
app.use(cookieParser('secret'));
app.use(session({
  cookie: { maxAge: 60000 },
  store: sessionStore,
  saveUninitialized: true,
  resave: 'true',
  secret: 'secret'
}));
app.use(flash());
// Middleware
app.use((req, res, next) => {
  //res.locals.success_msg = req.flash(('success_msg')[0]);
  res.locals.success_msg = req.flash('success_msg');
  //res.locals.error_msg = req.flash(("error_msg")[0]);
  res.locals.error_msg = req.flash("error_msg");
  next();
});
Tyler2P
  • 2,324
  • 26
  • 22
  • 31