请教 Express 4 中如何使用connect-mongo
发布于 6 年前 作者 jin5354 19170 次浏览 最后一次编辑是 4 年前

https://github.com/nswbmw/N-blog/wiki/第1章–一个简单的博客

正在跟随上面的教程一步一步做,在会话支持那一节中安装 connect-mongo 后,添加:

var MongoStore = require('connect-mongo')(express);
var settings = require('./settings');
和
app.use(express.cookieParser());
app.use(express.session({
 // ......
  })
}));

之后运行报错:

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

求问在 Express 4 中该如何处理这个中间件

11 回复

express 4 跟之前很不同。 比如 express.session 和 express.cookieParser 都已经不存在了。 express 和 中间件已经剥离了,除了 express.static。

我改成了这样: var MongoStore = require(‘connect-mongo’)(connect); var settings = require(’./settings’); var connect = require(‘connect’);

app.use(cookieParser()); app.use(connect.session({ //… }));

我把connect-mongo.js也换成了git上的兼容4.x的版本, 也用npm安装了connect,运行报错: var Store = connect.Store || connect.session.Store; ^ TypeError: Cannot read property ‘Store’ of undefined

恩,读了一下各个的说明,按照新的规则试着改了改,结果还是出错,有些头大,代码在二楼

var connect = require(‘connect’); var session = require(‘express-session’); var MongoStore = require(‘connect-mongo’)(connect);

app.use(session({ secret: settings.cookieSecret, store: new MongoStore({ db: settings.db }) }));

我这样子好像就OK了。

谢谢,可以了!令我奇怪的是我之前也有尝试过使用express-session,但是依旧出错。 看了你的回答之后我调整了一下代码顺序结果成功了,应该是我的代码顺序不对造成的。

朋友,您好,可以一同交流一下吗?您的qq是多少呢?

我也在写这个例子,感觉书中的代码都过时了,这个头大,希望可以交流一下,指点一下小弟

@jin5354 我也遇到这样的问题,你是咋样解决了的?求指教,我也在看这本书,能不能交流一下

书中是基于Express 3.x 版本进行开发的, 在 Express 升级到4.x 之后session中间件已经不再内置了, 需要自己安装, 并且使用方式也不一样了. Express 4.x 中使用方式改为了这样:

var session = require('express-session');
var MongoStore = require('connect-mongo')(session);

app.use(session({
    secret: 'foo',
    store: new MongoStore(options)
}));

而 Express 3.x 中是这样的:

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

app.use(express.session({
    secret: 'foo',
    store: new MongoStore(options)
}));
回到顶部