当我启动应用程序时,一切正常,但是当我转到任何页面时 像“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;
}
快递版:3.0.0 Mongoose-sessions版本:0.2.0
未定义的方法在哈希方法中是“crc16”:在debug中也是未定义的
function hash(sess) {
return crc16(JSON.stringify(sess, function(key, val){
if ('cookie' != key) return val;
}));
}
在crc模块中,有一个if(窗口)和窗口被定义,问题是我无法看到它的定义在哪里! 由于这个窗口,它不会导出任何模块,因此函数是未定义的!我只是非常hackly删除if(窗口)以始终导出到它的模块。 好吧,这是crc@0.2.0模块中的一个错误(https://github.com/alexgorbatchev/node-crc/pull/10),快递要求确切的版本。
究竟是什么问题以及如何解决? 非常感谢
答案 0 :(得分:0)
这只是第一次,然后是BUM,再次出现同样的错误......
因为session-mongoose中的依赖关系是这样的(松散地):
"dependencies": {
"mongoose": ">= 3.0"
},
它下载了猫鼬3.5.4! Npm应该只下载了3.0,但我不知道发生了什么。
现在我删除了它并将mongoose放在与我的app中相同的版本:3.4.0。
我仍然不知道3.5.4版本有什么问题,或者问题不一致,但这里有修复。
因此而失去了很多时间......:S
答案 1 :(得分: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,然后重试。
我不保证这会有效,但值得一试!