javascript - Node.js/Mongoose 类型错误

标签 javascript node.js mongodb express mongoose

我已经被以下错误困扰了一段时间:

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/

相关文章:

javascript - 在javascript中读取cookie,由asp.net c#code制作

javascript - 如何在 VS Code 中启用智能感知

javascript - 每当变量在服务器端更改其值时,如何使用 socket.io 向客户端发送数据?

node.js - nginx 作为网络服务器,包括。 socket.io 和 node.js/ws ://400 Bad Request

javascript - 如何发出错误以便可能在客户端的错误处理程序中捕获它?

javascript - 根据用户个人资料中的数组在集合中查找

mysql - 如何设计一组具有动态属性的数据库表?

javascript - 如何使用开始最小化的 html、css、jquery 和 php 创建响应表单?

javascript - Mongodb 获取文档在集合中的位置

javascript - Knockout.js 数据绑定(bind)数组到复选框列表