Node.js NodeJs req.flash方法在某些请求上不可用

Node.js NodeJs req.flash方法在某些请求上不可用,node.js,express,Node.js,Express,我想使用之前的req.flash。根据,只需配置应用程序即可使用: app.configure(function() { app.use(express.cookieParser('keyboard cat')); app.use(express.session({ cookie: { maxAge: 60000 }})); app.use(flash()); }); 但是,我已将我的应用程序配置为: app.configure('production', function()

我想使用之前的
req.flash
。根据,只需配置应用程序即可使用:

 app.configure(function() {
  app.use(express.cookieParser('keyboard cat'));
  app.use(express.session({ cookie: { maxAge: 60000 }}));
  app.use(flash());
});
但是,我已将我的应用程序配置为:

app.configure('production', function() {
    app.use(express.static('/static', express.static(__dirname + '/lib/static')));
      app.use(express.errorHandler());
  app.use(express.cookieParser('keyboard cat'));
  app.use(express.session({ cookie: { maxAge: 60000 }}));
  app.use(flash());
  app.use(passport.initialize());
  app.use(passport.session());
 app.use(app.router);
});
我一直在尝试检测flash的可用性,因此:

app.all('/*', function(req, res, next) {
   console.log('FLASH: ', req.flash);
    ....
我的日志显示如下:

FLASH:  undefined
FLASH:  undefined
FLASH:  function _flash(type, msg) {....

这只显示了对“/”路由的一个请求。我理解为什么一个
GET
请求到“/”可能会有多个请求,但是,我想知道为什么在文档状态下,
req.flash
不能在每个请求上都可用。

我认为您应该将配置更改为:

app.configure('production', function() {
  app.use(express.errorHandler());
  app.use(express.cookieParser('keyboard cat'));
  app.use(express.session({ cookie: { maxAge: 60000 }}));
  app.use(flash());
  app.use(passport.initialize());
  app.use(passport.session());
  app.use(express.static('/static', express.static(__dirname + '/lib/static')));
  app.use(app.router);
});
我总是在中间件的末尾保留静态路由


我认为问题在于,您的
/*
路由也会触发
/static
请求,而且由于该中间件是在
flash()
中间件之前声明的,因此请求对象尚未修改。

是您对静态文件的前两个请求吗?我没有使用req.flash,但它可能不适用于您的静态处理程序。将
flash()
中间件移到静态中间件之前,或者可能删除根路由上的通配符?是的,这正是必须的。favicon有一个静态请求,页面上有一个图像,正如您所说,flash在静态请求中不可用。我认为如果你想把它贴出来的话,这是一个值得回答的问题。如果这不起作用,我会将调试语句添加到express模块中,以了解为什么事情不一致。我喜欢使用与core相同的
NODE\u DEBUG
条件函数。将
net
替换为
myapp
,然后使用
NODE\u DEBUG=maypp NODE index.js启动应用程序