【问题标题】:Mongodb session store in Expressjs 4Expressjs 4 中的 Mongodb 会话存储
【发布时间】:2014-06-03 20:55:04
【问题描述】:

在 express 3 中,我使用 connect-mongo 进行会话存储。

var mongoStore = require('connect-mongo')(express);

但是在我切换到express 4之后它就不起作用了。我收到了这个错误:

Error: Most middleware (like session) is no longer bundled with Express and must be       installed separately. Please see https://github.com/senchalabs/connect#middleware.

我看到 connect 已从 express 4 中删除。我怎样才能继续使用它,或者有什么好的库可以用于 express 4。谢谢。

【问题讨论】:

    标签: mongodb session express


    【解决方案1】:

    尝试“新”会话中间件https://github.com/senchalabs/connect#middleware

    【讨论】:

    • 看来我得自己实现mongodb session store了。
    【解决方案2】:

    您仍然可以在 expressjs 4 中使用connect-mongo。自述文件中的示例:

    var session    = require('express-session');
    var MongoStore = require('connect-mongo')(session);
    
    app.use(session({
        secret: settings.cookie_secret,
        store: new MongoStore({
          db : settings.db,
        })
      }));
    

    【讨论】:

    • bower 用于主干、下划线、jquery、bootstrap、foundation 等客户端包。
    • 你说得对,我已经删除了对 bower 的提及。此外,我添加了一个示例,因为我仍然认为对于有相同问题的人来说知道您仍然可以使用它很重要。
    【解决方案3】:

    检查此模块和示例代码。

    https://www.npmjs.org/package/express-sessions

    var mongoose = require('mongoose');
    
    mongoose.connect();
    
    app.use(express.session({
        secret: 'a4f8071f-c873-4447-8ee2',
        cookie: { maxAge: 2628000000 },
        store: new (require('express-sessions'))({
            storage: 'mongodb',
            instance: mongoose, // optional
            host: 'localhost', // optional
            port: 27017, // optional
            db: 'test', // optional
            collection: 'sessions', // optional
            expire: 86400 // optional
        })
    }));
    

    【讨论】:

    • 不,这是旧的快递版本。
    【解决方案4】:

    您现在需要单独安装 express-session 包。可以在https://github.com/expressjs/session找到它

    使用以下命令启动并运行:

    npm install --save express-session cookie-parser
    

    然后在你的 server.js 文件中:

    var express = require('express'),
        cookieParser = require('cookie-parser'),
        expressSession = require('express-session'),
        MongoStore = require('connect-mongo')(expressSession),
        app = express();
    
    app.use(cookieParser());
    app.use(expressSession({
         secret: 'secret',
         store: new MongoStore(),
         resave: false,
         saveUninitialized: true
    }));
    

    然后享受

    【讨论】:

    • 我在这里看到了一些Unexpected token -
    • 我认为这是无效的变量名。我更新了答案以反映更好的变量名称。
    • 将此行 MongoStore = require('connect-mongo')(express-session) 更改为 MongoStore = require('connect-mongo')(expressSession)
    猜你喜欢
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 2023-04-10
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多