Search code examples
node.jsconnect-flash

Flash message is not display on handlerbar template using node js with passport js


I am trying to show message in handlebar template using connect-flash package but message is not showing and its print count when i use {{loginMessage}} in login page. but not display message. here is my code

file..routes/index.js

 var express =  require('express');
 var router =   express.Router();
 var mongoose = require('mongoose');
 var flash =    require('connect-flash');
 const m_db =   require('.././config/mongo_connection');
 var Site =     require('.././models/site');
 var User = require('../models/user');
 var bcrypt   = require('bcrypt-nodejs');
 var passport = require('passport');
 var LocalStrategy = require('passport-local').Strategy;
 require('.././config/passport')(passport);
 //routes start here
 router.get('/login', function(req, res, next) {    
 res.render('passports/login.hbs', { message:   req.flash('loginMessage','failed login') });

})

my app.js

  app.use(require('express-session')({
  secret: 'keyboard cat',
  resave: false,
  saveUninitialized: false
}));
  app.use(flash());
 //
  app.use(passport.initialize());
  app.use(passport.session());
  app.use(express.static(path.join(__dirname, 'public')));
 // passport config

 app.use(logger('dev'));
 app.use(bodyParser.json());
 app.use(bodyParser.urlencoded({ extended: false }));
 app.use(cookieParser());
 app.use(express.static(path.join(__dirname, 'public')));

 app.use('/', index);
 app.use('/users', users);
 app.use('/api', api);

 // catch 404 and forward to error handler
  app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
 });

 // error handler
  app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
 });
  module.exports = app;

Please help! Thanks!


Solution

  • router.get('/login', function(req, res, next) {           
    
      res.render('passports/login.hbs', { message: req.flash('loginMessage') }); 
         .
         .
    

    What I want to say it:

    req.flash('loginMessage','failed login')  
    

    is for setting the flash variable name loginMessage to failed login

    req.flash('loginMessage')
    

    and this is when your read the flash that your set later on. The code above return array of flash messages(if more than one flash are set) of loginMessage.