今天在实现mongodb数据库的过程中,遇到一个如题这个问题,这个问题的意思是:大多数中间件(像session)不再随express一起安装。
在express 4.0之前的版本,像session之类的中间件是伴随express自动安装的,网上有的教程使用的express版本正是4.0之前的版本,所以在使用4.0及其之后版本的时候一定要注意这点。
我的代码中使用session中间件的代码:
app.use(express.session({
secret:setting.cookieSecret,
key:setting.db,
cookie:{maxAge:1000*60*60*24*30},
store:new MongoStore({db:setting.db})
}));
这是在实现mongodb回话组建connect-mongo时需要的。
查看node_modules\connect-mongo\Readme.md可以看到4.0之后的用法已经不一样了。内容:
With express4:
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
app.use(session({
secret: settings.cookie_secret,
store: new MongoStore({
db : settings.db,
})
}));
With express<4:
var express = require('express');
var MongoStore = require('connect-mongo')(express);
app.use(express.session({
secret: settings.cookie_secret,
store: new MongoStore({
db: settings.db
})
}));
With connect:
var connect = require('connect');
var MongoStore = require('connect-mongo')(connect);
【解决办法】:
在package.json中加入express-session的中间件,命令提示符进入项目目录下,npm install 重新安装。或是在目录下使用命令安装:npm i express-session即可将express-session安装到项目中。在使用的模块中加入
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
……
使用的时候不在使用express.session,而是直接使用session():
app.use(session({
secret:setting.cookieSecret,
key:setting.db,
cookie:{maxAge:1000*60*60*24*30},
store:new MongoStore({db:setting.db})
}));