NodeJS - Express 4.0錯誤:Cannot read property 'Store' of undefined


按着《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啟動服務,問題就解決了。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM