按着《NodeJS開發指南》里的第五章建立microblog的例子操作,使用node.js 的express框架配置將session存儲到mongodb時出錯:TypeError: Cannot read property 'Store' of undefined。
加載connect-mongo模塊的寫法為:
//加載模塊
var MongoStore= require("connect-mongo"); //配置express session app.use(express.session({ secret:setting.cookieSecret, db: seeting.db }));
啟動程序報錯:TypeError: Cannot read property 'Store' of undefined
網上有人修改如下之后重啟是OK的:
With express:
var express = require('express'); var MongoStore = require('connect-mongo')(express); app.use(express.session({ secret: settings.cookie_secret, store: new MongoStore({ db: settings.db }) }));
但是我修改之后報如下錯誤:
Error: Most middleware (like session) is no longer bundled with Express and must be installed separately. Please see https://github.com/senchalabs/connect#middl eware. at Function.Object.defineProperty.get (E:\2014-Study\NoteJS\microblog\node_m odules\express\lib\express.js:89:13) at module.exports (E:\2014-Study\NoteJS\microblog\node_modules\connect-mongo \lib\connect-mongo.js:30:39) at Object.<anonymous> (E:\2014-Study\NoteJS\microblog\app.js:9:42) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Module.require (module.js:364:17) at require (module.js:380:17)
后來修改回原來的寫法,提示找不到“Store”,然后就到目錄“\node_modules\connect-mongo”下查看Readme.md文檔,上面提示:
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);
因為本機Express的版本是4.0,所以修改成用第一種方式引用session,同時修改目錄下的package.json文件,添加對“express-session”的依賴如下:
{ "name": "application-name", "version": "0.0.1", "private": true, "scripts": { "start": "node ./bin/www" }, "dependencies": { "express": "~4.0.0", "static-favicon": "~1.0.0", "morgan": "~1.0.0", "cookie-parser": "~1.0.1", "body-parser": "~1.0.0", "debug": "~0.7.4", "ejs": "~0.8.5", "mongodb": ">= 0.9.9", "connect-mongo": ">= 0.1.7", "express-session": "~1.0.4" } }
然后在命令行下進入到當前目錄,執行npm install就默認安裝了express-session模塊了。
之后再執行npm start啟動服務,問題就解決了。