Search code examples
node.jsexpressconnect-flash

How to put flash message into my code?


I have a function

function fileFilter(req, file, cb) {
        if (file.mimetype !== 'image/png' && file.mimetype !== 'image/jpg' && file.mimetype !== 'image/gif' ) {
            console.log('Wrong format!');
            return cb(null, false);
        }
        if ( file.size > 10000 ){
            console.log('Image is too big!');
            return cb(null, false);
        }
        cb(null, true);
}
var upload = multer({ storage: storage, fileFilter: fileFilter });

This function works when I am making post request.

router.post('/changeAvatar', upload.single('avatar'), function(req, res) {
    var id = req.user._id;
    res.redirect('/user/'+id);
});

How can I put flash (connect-flash) instead off my console.log's?

Connect-flash is already installed, with cookies and sessions. I tried different ways, but I can't understand philosophy of flash messages...


Solution

  • first in your entry script you should use the connect flash middleware:

    var express = require('express');
    var session = require('express-session');
    var cookieParser = require('cookie-parser');
    var flash = require('connect-flash');
    var app = express();
    
    app.use(cookieParser('secret'));
    app.use(session({cookie: { maxAge: 60000 }}));
    app.use(flash());
    

    then your function should look like :

      function fileFilter(req, file, cb) {
            if (file.mimetype !== 'image/png' && file.mimetype !== 'image/jpg' && file.mimetype !== 'image/gif' ) {
                req.flash('error', 'Wrong format!');
                return cb(null, false);
            }
            if ( file.size > 10000 ){
                req.flash('error', 'Image is too big!');
                return cb(null, false);
            }
            cb(null, true);
    }
    

    finally in '/user/'+id view you can get data from flash with :

    JSON.stringify(req.flash('error'));