2

I have a project that I need to use connect-flash, I am using view engine as ejs. Even I configure everything fine, in my opinion, connect-flash doesn't work. Could anybody please help me abput that?

Here how did I define the session, connect-flash and global variables:

app.use(cookieParser());
//Express session middleware
app.use(session({
    secret: 'secret',
    resave: true,
    saveUninitialized: true
}));

//Connect flash middleware
app.use(flash());

//Global varibales
app.use(function (req, res, next) {
    res.locals.error = req.flash('error');
    res.locals.success = req.flash('success');
    next();
});

Here is the export module get function:

module.exports.xxx_index_get = function(req, res) {
xxx.findOne({
    id: 'xxx'
}).then(xxx=> {
    req.flash('success', 'user succesfulyl registered')
    res.render('xxx/xxx', {
        xxx
    });
});};

And here is the ejs file:

<% if(success.length > 0) { %><div class="alert alert-success">
<%= success %>    </div><% } %>

I would be really thankful If somebody will help about that. Am I missing something?

aviya.developer
  • 3,343
  • 2
  • 15
  • 41
Mert
  • 41
  • 1
  • 4

3 Answers3

3

I assume that you have required all the essential details for flash.

Include below code into you routes

module.exports.xxx_index_get = function(req, res) {
xxx.findOne({
    id: 'xxx'
}).then(xxx=> {
    req.flash('success', 'user succesfulyl registered')
res.locals.message = req.flash();
    res.render('xxx/xxx', {
        xxx
    });
});};

and then in you views try to use something like this

<% if(locals.message){ %>
    <div class="alert alert-success" role="alert">
        <strong>Well done!</strong> <%=message.success%>
    </div>
    <% } %>

Hope this helps you.

Abhi Burk
  • 2,003
  • 1
  • 14
  • 21
3

Here is another solution

//middlewares/flashMessage.js
exports.flashMessage = function (req, res, next) {
    const successFlashMessageArr = req.flash('success');
    const errorFlashMessageArr = req.flash('error');
    res.locals.successFlashMessage = successFlashMessageArr[0];
    res.locals.errorFlashMessage = errorFlashMessageArr[0];
    next();
}

In app.js use this middleware

const flashMessageMiddleware = require('./middlewares/flashMessage');
app.use(flashMessageMiddleware.flashMessage);

And in the EJS file, you can use global variables

<% if(successFlashMessage){ %>
<div class="alert alert-success">
    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
    <%=successFlashMessage%>
</div>
<% } %>

<% if(errorFlashMessage){ %>
<div class="alert alert-error">
    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
    <%=errorFlashMessage%>
</div>
<% } %>
Daud khan
  • 2,413
  • 2
  • 14
  • 18
2

You can use the example of Daud Khan, however, when declaring messages it is out of scope, to display your messages use <%- %>

example of how your message will look:

<% if(successFlashMessage){ %>
<div class="alert alert-success">
    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
    <%- successFlashMessage %>
</div>
<% } %>

<% if(errorFlashMessage){ %>
<div class="alert alert-error">
    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
    <%- errorFlashMessage %>
</div>
<% } %>
Teuuz1994
  • 21
  • 2