我使用express和express-session中间件来构建一个网站,并启用了 session 。但有些url如/health-check'和
/version-check不需要session,尤其是
/health-check`,这会在db中产生大量无用的session(项目使用mongodb)。我相信有一个很好的解决方案来解决这个问题。
以下是 session 片段:
var session = require('express-session'),
passport = require('passport');
var app = express();
//other middleware.
// Express MongoDB session storage
app.use(session({
saveUninitialized: true,
resave: true,
secret: config.sessionSecret,
cookie: { maxAge: 2628000000 },
store: new mongoStore({
db: db.connection.db,
collection: config.sessionCollection
})
}));
// use passport session
app.use(passport.initialize());
app.use(passport.session());
//...
最佳答案
我建议创建自己的中间件函数并将 session 中间件作为函数放置在那里,但条件如下:
app.use(function(req, res, next){
if(...some condition...){//for example check url
//do something or nothing
next();//very important or request will freeze
} else {//otherwise run session
session({your options})(req, res, next);
}
});
而不是你的app.use(session())
在一个自定义中间件中,您可以放置任何其他中间件来添加条件。但是,当您想要将多个中间件包装为单个自定义中间件时,请注意“下一个”。它在中间件中只能使用一次(多个中间件使用多次)。然后您必须创建自己的回调“next”。
关于node.js - 如何使用nodejs基于url启用/禁用 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32881885/