2014-01-05 2 views
0

Я страдала из-за ошибки в течение некоторого времени:Node.js/Mongoose TypeError

TypeError: Cannot read property 'scope' of undefined 
    at model.Object.defineProperty.set [as size] (/Users/sourabhdesai/Documents/nodejstuts/expressTest/node_modules/mongoose/lib/document.js:1200:58) 
    at Function.compile (/Users/sourabhdesai/Documents/nodejstuts/expressTest/node_modules/mongoose/lib/model.js:2516:24) 
    at Mongoose.model (/Users/sourabhdesai/Documents/nodejstuts/expressTest/node_modules/mongoose/lib/index.js:358:17) 
    at NativeConnection.Connection.model (/Users/sourabhdesai/Documents/nodejstuts/expressTest/node_modules/mongoose/lib/connection.js:600:23) 
    at Object.<anonymous> (/Users/sourabhdesai/Documents/nodejstuts/expressTest/user/index.js:87:20) 
    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) 

линия, где это брошено (пользователь/index.js: 87) является:

MusicQueueObj = db.model('MusicQueue', MusicQueueSchema);

Я определил db до того, что в следующем коде:

var mongoose = require('mongoose'); 
var db = mongoose.createConnection('localhost', 'musicqueuedb'); 

Любые подсказки о том, что вызывает эту ошибку? Я искал SO и Интернет довольно тщательно для предложений, но ничего не придумал. Im в процессе обучения node.js и mongoose, поэтому любая информация может быть только полезной на данный момент. Я почти уверен, что мои схемы настроены правильно.

Вот как я определил MusicQueueSchema:

var MusicQueueSchema = new mongoose.Schema({ 
    size : Number, 
    marker : Number, 
    array : [String] 
}); 

Вот некоторые из методов экземпляра:

MusicQueueSchema.methods.doubleArray = function() { 
    var newArray = new Array(2 * this.array.length); 
    for (var i = this.array.length - 1; i >= 0; i--) { 
     newArray[i] = this.array[i]; 
    }; 
    this.array = newArray; 
}; 

MusicQueueSchema.methods.addSong = function(songLink) { 
     songLink = songLink.replace("%2F","/"); 
     if(this.size == this.array.length) this.doubleArray(); 
     this.array[this.size] = obj; 
     this.size++; 
}; 
MusicQueueSchema.methods.shuffle = function() { 
     var permArray = randperm(elems.length); // randperm(...) is a function I defined later on in this module. Its not a method of MusicQueueSchema 
     var newArray = new Array(permArray.length); 
     for (var i = elems.length - 1; i >= 0; i--) { 
      newArray[i] = this.array[permArray[i]]; 
     } 
}; 

Это не все из них (это было бы совсем немного кода), но его достаточно, чтобы показать, как я написал все мои методы экземпляра для этого MusicQueueSchema.

+0

Вам нужно будет показать больше кода определения схемы. – WiredPrairie

+0

@WiredPrairie Я просто сделал. Благодаря! – sourdesi

+0

OK - Я просто попробовал основную схему, и она работает нормально. Есть ли еще что-то, что вы не показываете? – WiredPrairie

ответ

0

Try MusicQueueObj = mongoose.model("MusicQueue", MusicQueueSchema);

+0

вполне логично определить модель на подключении db: http://mongoosejs.com/docs/api.html#connection_Connection-model – WiredPrairie

+0

Я сделал это с помощью 'mongoose.model (...)' также, но я был получая с ним ту же ошибку. – sourdesi

4

я понял причину этой ошибки. Я начал выборочно комментировать фрагменты своего кода, чтобы узнать, что вызывает ошибку. Оказывается, что мой метод size() был проблемой. Это связано с тем, что оно имело то же имя, что и мое свойство size в схеме. Когда я изменил имя моего метода size() на getSize(), ошибка исчезла, и все получилось нормально.

Мораль истории: Удостоверьтесь, что вы не используете одно и то же имя дважды при определении своих схем мангуста.