【问题标题】:"undefined is not a function" error when using mongoose-sessions and express使用 mongoose-sessions 和 express 时出现“未定义不是函数”错误
【发布时间】:2013-01-10 06:42:02
【问题描述】:

当我启动应用程序时一切正常,但是当我转到任何页面时 像“localhost/”我得到这个(双:一次用于index.html,一次用于请求的javascript,见下文)错误:

TypeError: undefined is not a function
    at hash (myapp\node_modules\express\node_modules\connect\lib\middleware\session.js:341:10)
    at myapp\node_modules\express\node_modules\connect\lib\middleware\session.js:324:24
    at Promise.module.exports.SessionStore.get (myapp\node_modules\session-mongoose\index.js:85:22)
    at Promise.addBack (myapp\node_modules\session-mongoose\node_modules\mongoose\lib\promise.js:128:8)
    at Promise.EventEmitter.emit (events.js:96:17)
    at Promise.emit (myapp\node_modules\session-mongoose\node_modules\mongoose\lib\promise.js:66:38)
    at Promise.complete (myapp\node_modules\session-mongoose\node_modules\mongoose\lib\promise.js:77:20)
    at Query.findOne (myapp\node_modules\session-mongoose\node_modules\mongoose\lib\query.js:1607:15)
    at model.Document.init (myapp\node_modules\session-mongoose\node_modules\mongoose\lib\document.js:229:11)
    at model.init (myapp\node_modules\session-mongoose\node_modules\mongoose\lib\model.js:196:36)
TypeError: undefined is not a function
    at hash (myapp\node_modules\express\node_modules\connect\lib\middleware\session.js:341:10)
    at myapp\node_modules\express\node_modules\connect\lib\middleware\session.js:324:24
    at Promise.module.exports.SessionStore.get (myapp\node_modules\session-mongoose\index.js:85:22)
    at Promise.addBack (myapp\node_modules\session-mongoose\node_modules\mongoose\lib\promise.js:128:8)
    at Promise.EventEmitter.emit (events.js:96:17)
    at Promise.emit (myapp\node_modules\session-mongoose\node_modules\mongoose\lib\promise.js:66:38)
    at Promise.complete (myapp\node_modules\session-mongoose\node_modules\mongoose\lib\promise.js:77:20)
    at Query.findOne (myapp\node_modules\session-mongoose\node_modules\mongoose\lib\query.js:1607:15)
    at model.Document.init (myapp\node_modules\session-mongoose\node_modules\mongoose\lib\document.js:229:11)
    at model.init (myapp\node_modules\session-mongoose\node_modules\mongoose\lib\model.js:196:36)

这是我正在使用的代码:

var express = require('express');
var app = this.__app = express();
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({
     store: this.__getSessionStore()
    ,secret: this.__secretSession
}));

app.post('/rpc', this.__manageRequest.bind(this)); // <-- this method is not even called
app.use("/client", express.static('./client/')); // 
// gets the index.html, but files in subfolders (which exists) throws the second error in the double error 
app.use("/", express.static('./client/production/build')); 

app.listen(this.__appPort, this.__appIp);

我如何获得会话存储:

__getSessionStore: function(){
    var express = require('express');
    var app = this.__app;
    var SessionMongoose = require("session-mongoose")(express);
    var mongooseSessionStore = new SessionMongoose({
         url: this.__mongodbUrl
        ,interval: 120000
    });
    return mongooseSessionStore;
}

Express 版本:3.0.0 Mongoose-sessions 版本:0.2.0

hash方法中未定义的方法是“crc16”:在debug中也是未定义的

function hash(sess) {
  return crc16(JSON.stringify(sess, function(key, val){
    if ('cookie' != key) return val;
  }));
}

在 crc 模块中,有一个 if(window) 和 window 被定义,问题是我看不到它是在哪里定义的! 因为这个窗口,它不会导出任何模块,因此函数是未定义的!我只是非常巧妙地删除了 if(window) 以始终导出到它的模块。 嗯,这是 crc@0.2.0 模块 (https://github.com/alexgorbatchev/node-crc/pull/10) 中的一个错误,而 express 需要那个确切的版本。

究竟是什么问题以及如何解决? 非常感谢

【问题讨论】:

    标签: express mongoose runtime-error


    【解决方案1】:

    这只是第一次工作,然后 BUM,再次出现同样的错误......

    由于 session-mongoose 中的依赖是这样的(松散的):

    "dependencies": {
      "mongoose": ">= 3.0"
    },
    

    它下载了猫鼬3.5.4! npm应该只下载了3.0,但我不知道发生了什么。

    现在我删除了它并将猫鼬置于与我的应用程序相同的版本:3.4.0。

    我仍然不知道 3.5.4 版本有什么问题,或者问题是否不相等,但这里是修复。

    因此浪费了很多时间... :S

    【讨论】:

      【解决方案2】:

      也许编辑 ./node_modules/express/package.json 告诉它使用更新的 CRC 库。

      换行:

      "crc": "0.2.0",
      

      "crc": ">= 0.2.0",
      

      然后运行

      npm install -d
      

      如果没有安装更新的 crc 库,请手动删除文件夹 ./node_modules/express/node_modules/crc 并重试。

      我不保证这会奏效,但值得一试!

      【讨论】:

      • 嗯,crc作者更新crc模块的时候,并没有改版本,所以还是crc@0.2.0,但是有2个不同的版本合二为一……所以只好删了文件夹并重新安装crc ...或者git中的crc@0.2.0与npm中的不同..还不知道,因为我是直接从git复制的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      相关资源
      最近更新 更多