0

nodejs とセッションで奇妙な問題が発生しています。問題を session.save 関数まで追跡しました。

TypeError: Cannot read property 'sessionStore' of undefined 
at Session.save (C:\Program Files\nodejs\node_modules\express\node_modules\connect\lib\middleware\session\session.js:65:11);

//Code in connect session module where this.req gets its value
var Session = module.exports = function Session(req, data) {

  Object.defineProperty(this, 'req', { value: req });
  Object.defineProperty(this, 'id', { value: req.sessionID });
  if ('object' == typeof data) utils.merge(this, data);
  console.log("SESSION CREATED", typeof this.req, "VS" , typeof req);
  //outputs SESSION CREATED undefined VS object
};

//The session.save function, here the this.req is undefined and it causes the error
Session.prototype.save = function(fn){
  this.req.sessionStore.set(this.id, this, fn || function(){});
  return this;
};

何が原因でしょうか?

クイック編集:

この問題は、外部の api(box2d) ファイルが必要な場合にのみ発生します。var Box2D = require('./box2d.js'); そのファイルは動作するデモが付属しているため動作し、私のコードでも動作しましたが、ノードを再起動した後...何らかの理由でセッションが中断されました。ソケットはまだ機能します。

ファイルはここにあります (短縮された google docs) box2D 競合する可能性のあるキーワードを検索しましたが、疑わしいものは何も表示されませんでした。そのファイルはかなり大きいです...それは問題でしょうか?

4

1 に答える 1

1

接続を切断するのは、(Box2D 内の) defineProperty のカスタム実装です。このフィドルを試してから、defineProperty 関数を削除してください。

最初に未定義の警告が表示されます。コードを削除すると、[objectObject] に警告が表示されます (当然のことです)。

if(!(Object.prototype.defineProperty instanceof Function)
      && Object.prototype.__defineGetter__ instanceof Function
      && Object.prototype.__defineSetter__ instanceof Function)
   {
      Object.defineProperty = function(obj, p, cfg) {
         if(cfg.get instanceof Function)
            obj.__defineGetter__(p, cfg.get);
         if(cfg.set instanceof Function)
            obj.__defineSetter__(p, cfg.set);
      }
   }

http://jsfiddle.net/nqUrQ/

ただし、ノード環境でこれをテストしていません。

于 2013-11-15T10:58:18.247 に答える