node.js - 如何使用nodejs基于url启用/禁用 session ?

标签 node.js session express

我使用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/

相关文章:

session - 检查 session ID 是否仅在 tomcat 中由 sessionId 有效?

node.js - 使用 ES6 类的快速路由

node.js - 事后如何编写 HTTP 500 错误 header

javascript - 通过 Express 路由向 React 传递参数

javascript - 我的套接字怎么能留在房间里,所以客户端会收到消息

node.js - 测试控制台日志功能

java - 如何从 ManagedBean 获取 xhtml jsf 页面上的 session 信息?

javascript - 检查第一个字符是否是数字 - Discord.js

javascript - javascript 中的 .call 是否将自身绑定(bind)到调用对象?

python - Flask session 不 JSON 序列化 cookie