如何使用nodejs基于url启用/禁用会话?

时间:2015-10-01 07:34:07

标签: node.js session express

我使用快速和快速会话中间件来构建一个启用了会话的网站。但是有些网址如/health-check' and / version-check do not need session, especially the / health-check`,会在db中产生大量无用的会话(项目使用mongodb)。我相信有一个很好的解决方案解决这个问题。

以下是会话的片段:

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());
//...

1 个答案:

答案 0 :(得分:0)

我建议创建自己的中间件函数,并将会话中间件作为函数放在那里,但条件包括:

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())

在一个自定义中间件中,您可以添加任何其他中间件来添加条件。但是当你想要将更多的中间件包装到单个自定义中间件时要小心“下一步”。它只能在中间件中使用一次(多个中间件使用多次)。然后你必须创建自己的回调'下一步'。