可以't让connect-flash在重定向时使用express.js

Can't get connect-flash to work with express.js on redirect

本文关键字:重定向 js express connect-flash 可以      更新时间:2023-09-26

好的,由于某种原因,当我res.render()时,会话闪存可以工作,但当我尝试设置会话闪存然后重定向时,它不会显示。以下是else子句中的联系方法中的问题)。。。

这是重定向期间记录到控制台的内容:

{} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} { info: [ 'Thanks we will return your message soon' ] } {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {} {}

正如你所看到的,消息肯定在那里,但看起来它被一个空对象取代了。

这是我的代码:

app.js

var flash = require('connect-flash');
// Grab sessions
var sessionFlash = function(req, res, next) {
  res.locals.messages = req.flash();
  console.log(res.locals.messages);
  next();
}
app.configure(function() {
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(viewHelpers());
  app.use(express.bodyParser({ uploadDir : './' }));
  app.use(expressValidator);
  app.use(express.methodOverride());
  app.use(express.cookieParser('keyboard cat'));
  app.use(express.session({
    secret: config.secret,
    cookie: {
      maxAge: 365 * 24 * 60 * 60 * 1000
    },
    store: new MongoStore(config.db)
  }));
  app.use(flash());
  app.use(sessionFlash);
  app.use(express.static(__dirname + '/public'));
  app.use(app.router);
});

views/layout.jade

- if (typeof message !== 'undefined')
  =message

controllers/index.js

function controllers(params) {
  controllers.contact = function(req, res) {
    if (errors) {
      // This works as intended
      req.flash('info', 'Please fix the errors below.');
      res.render('contact', {
        title : 'Contact -',
        message: req.flash('info'),
        errors: errors,
        params: params
      });
      return;
    } else {
      // This doesn't work
      req.flash('info', 'Thanks we will return your message soon');
      res.redirect('/');
    }
   };
   return controllers
  }
  module.exports = controllers;

好吧,您正在重定向到'/',而服务器没有响应。

您的app.js 中没有app.get('/', function(req, res){...});

Flash消息是在来自同一客户端的两个请求之间的持续时间内存储在服务器上的消息,因此仅在下一个请求中可用。闪光灯不显示,因为您的res.redirect('/');什么都不做。