Express: req.flash() requires sessions

11,123

Solution 1

The issue was with how my view was getting rendered (using req.flash data)

Changing this:

loginShow: function(req, res){
    res.render('login', { message: req.flash });
}

To this:

loginShow: function(req, res){
    res.render('login', { message: req.flash() });
}

Fixed the error and causes connect-flash to act as expected.

Solution 2

Is your redis-server running? Try

redis-server

This solved the issue for me.

Share:
11,123

Related videos on Youtube

Ash
Author by

Ash

https://aboxshall.com/about

Updated on September 14, 2022

Comments

  • Ash
    Ash over 1 year

    I'm having some problems getting connect-flash to work, the error message I'm getting is:

    'Error: req.flash() requires sessions'

    I've seen this can be because of the ordering of the app, but I'm not sure if this is the case here.

    App.js:

    var express = require('express');
    var path = require('path');
    var favicon = require('serve-favicon');
    var logger = require('morgan');
    var cookieParser = require('cookie-parser');
    var bodyParser = require('body-parser');
    var session = require('express-session');
    var flash = require('connect-flash');
    var passport = require('passport');
    var app = express();
    
    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(session({secret: '{secret}', name: 'session_id', saveUninitialized: true, resave: true}));
    app.use(passport.initialize());
    app.use(passport.session());
    app.use(flash());
    

    Routes etc. are below

    flash generating code:

    passport.authenticate('local', { failureRedirect: '/login', successRedirect: '/', failureFlash: true})
    
    • flaudre
      flaudre
      In my case the RedisStore object in the store property of the express-session was wrongly configured (wrong port).
    • Nathan Bertram
      Nathan Bertram
      Same here -- didn't have Redis running the background.