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启动应用程序