我已经被以下错误困扰了一段时间:
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)
抛出此问题的行(user/index.js:87)是:
MusicQueueObj = db.model('MusicQueue', MusicQueueSchema);
我之前已经在以下代码中定义了db
:
var mongoose = require('mongoose');
var db = mongoose.createConnection('localhost', 'musicqueuedb');
关于导致此错误的原因有任何线索吗?我已经在互联网上非常彻底地搜索了建议,但一无所获。我正在学习 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
编写所有实例方法。
最佳答案
我找出了这个错误的原因。我开始有选择地注释我的代码片段,以查看导致错误的原因。原来是我的 size()
实例方法出了问题。这是因为它与架构中的 size
属性具有相同的名称。当我将 size()
方法的名称更改为 getSize()
时,错误消失并且工作正常。
故事的寓意:确保在定义 Mongoose 模式时不要使用相同的名称两次。
关于javascript - Node.js/Mongoose 类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20939451/