javascriptnode.jsexpressconnect-flash

How to pass a link to req.flash() in express.js


I have been trying to figure out a way of passing a link in req.flash() in my js file, without actually doing that in html template, because am using the alert message as a partial in other html pages, I wish to pass in resend verification link, is there a way around this, or do i really have to create another req.flash for verify

app.use(function(req,res,next){
    res.locals.error = req.flash("error");
    res.locals.success = req.flash("success")
    next();
})

router.get("/verification", function(req,res){
    verification coding stuff here
})

the verification route is the link that i wish to pass in the req.flash('error')

router.get('/verify/:token', function(req,res){
  User.findOne({ verificationToken: req.params.token, resetPasswordExpires: { $gt: Date.now()}}, function(err, user){
      if(err){
          console.log(err);
          //here is where i wish to pass in the link for verification link//
          req.flash('error', 'Mail verify token is invalid or has expired' + resend link here + '.')
          return res.redirect('/forgot')
      } else {
          user.active = "true"
          user.save()
          console.log(user.active);
          req.flash('success', 'Your mail have been verified successfully')
          res.redirect('/login');
      }
  })
})

<% if(error && error.length > 0) { %>
    <div class="alert alert-danger alert-dismissible deposit-alert" role="alert">
        <div class="container">
            <%= error %>
        </div>
    </div>
<% } %>

Solution

  • The following should work for you.

    Controller::

    router.get('/verify/:token', function(req,res){
      User.findOne({ verificationToken: req.params.token, resetPasswordExpires: { $gt: Date.now()}}, function(err, user){
          if(err){
              console.log(err);
              //here is where i wish to pass in the link for verification link//
              var link  = '/verification/';
              var message =  'Mail verify token is invalid or has expired, <a href="'+ link +'"> Click here to resend the link</a>.'
              req.flash('error',message)
              return res.redirect('/forgot')
          } else {
              user.active = "true"
              user.save()
              console.log(user.active);
              req.flash('success', 'Your mail have been verified successfully')
              res.redirect('/login');
          }
      })
    })
    

    Template Instead of using <%= message %> use this. <%- message %>

    <% if(error && error.length > 0) { %>
        <div class="alert alert-danger alert-dismissible deposit-alert" role="alert">
            <div class="container">
              <%- message %> 
            </div>
        </div>
    <% } %>