https://my.oschina.net/u/1466553/blog/294336
http://blog.csdn.net/liyi109030/article/details/35271389
express是基于node.js的一个web框架,但是到了4.xx版本之后,session管理和cookies等许多模块都不再直接包含在express中,而是需要单独下载添加。
var express = require(‘express‘); var session = require(‘express-session‘); //如果要使用session,需要单独包含这个模块 var cookieParser = require(‘cookie-parser‘); //如果要使用cookie,需要显式包含这个模块 var RedisStore = require(‘connect-redis‘)(session); var app = express(); // 设置 Cookie app.use(cookieParser(‘xiaocc_‘)); // 设置 Session app.use(session({ store: new RedisStore({ host: "127.0.0.1", port: 6379, db: "test_session" }), resave:false, saveUninitialized:false, secret: ‘keyboard cat‘ }))
在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}) }));
时间: 2024-12-29 11:30:51