0

アプリケーションを初期化するとすべて問題ありませんが、「localhost/」のようなページに移動すると、次のエラーが発生します(ダブル:index.htmlで1回、リクエストされたjavascriptで1回、以下を参照)エラー:

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 セッション バージョン: 0.2.0

未定義のメソッドはハッシュメソッドの「crc16」です:デバッグでも未定義です

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 にはその正確なバージョンが必要です。

正確には何が問題で、どのように修正するのですか?どうもありがとう

4

2 に答える 2

0

これは最初にのみ機能し、次にBUM、同じエラーが再び発生しました...

セッション-マングースの依存関係は次のようになります(大まかに):

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

マングース3.5.4をダウンロードしました!Npmは3.0をダウンロードするだけでよかったのですが、何が起こったのかわかりません。

これを削除して、マングースをアプリと同じバージョン3.4.0に配置しました。

3.5.4バージョンの何が問題になっているのか、または問題が同じではないのかはまだわかりませんが、ここに修正があります。

これが原因で多くの時間が失われました...:S

于 2013-01-09T15:48:34.817 に答える
0

おそらく、./node_modules/express/package.json を編集して、より新しい CRC ライブラリを使用するように指示します。

行を変更します。

"crc": "0.2.0",

"crc": ">= 0.2.0",

そして実行します

npm install -d

更新された crc ライブラリがインストールされない場合は、フォルダー ./node_modules/express/node_modules/crc を手動で削除し、再試行してください。

これがうまくいくとは約束しませんが、試してみる価値はあります!

于 2013-01-09T22:42:02.757 に答える