connect-flash с пакетом экспресс-сообщений не работает с рулями в expressjs4 - PullRequest
0 голосов
/ 16 октября 2018

У меня есть экспресс-проект, в котором app.js файл содержит следующий код:

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var session = require('express-session');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var expressValidator = require('express-validator');
var multer = require('multer');
var upload = multer({dest:'./uploads'});
var flash = require('connect-flash');
var bcrypt = require('bcryptjs');
var mongo = require('mongodb');
var mongoose = require('mongoose');

// creating database object
var db = mongoose.connection;

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');

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

//handle session
app.use(session({
    secret:'sjhfdsjkfhdsjk5456dsddsa',
    saveUninitialized: true,
    resave:true
}));

// Passport
app.use(passport.initialize());
app.use(passport.session());

//express-messages
app.use(flash());
app.use(function (req, res, next) {
  res.locals.messages = require('express-messages')(req, res);
  next();
});


app.use('/', indexRouter);
app.use('/users', usersRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// 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;

В роутере users.js имеет следующий маршрут

router.post('/register', [
    check('fname', "First Name is Required").not().isEmpty(),
    check('email', "Email is Required").not().isEmpty(),
    check('password', "Password is Required").not().isEmpty()
    ], function(req, res, next)
{
    var fname = req.body.fname; 
    var lname = req.body.lname; 
    var email = req.body.email; 
    var mobile = req.body.mobile;   
    var password = req.body.password;   
    var cpassword = req.body.cpassword;

    //Check Error
    let errors = validationResult(req);
    if (!errors.isEmpty()) {
        console.log(errors.mapped());
        return res.render('register', {layout:false, errors: errors.mapped() })
      }else{
        var newUser = new Users({
            fname: fname,
            lname: lname,
            role: 'admin',
            email: email,
            mobile: mobile,
            password: password,
            status: "Active",
            regdate: new Date()
        });
        Users.createUser(newUser, function(err, user){
            if(err) throw err;

        });

        req.flash('info', 'Registration successfully');
        res.redirect('/users/login');

    }

});

как и в приведенном выше маршруте, я пытаюсь отправить флеш-сообщение на / users / login , который использует шаблон hbs.но / users / login не отображает флеш-сообщение.Нет сообщения об ошибке.но когда я печатаю флэш в / зарегистрируй роутер используя console.log.это работает, но после перенаправления на / user / login , не отображая флеш-сообщения в шаблоне login.hbs

...