【问题标题】:Cannot read property 'validate' of undefined无法读取未定义的属性“验证”
【发布时间】:2015-09-07 15:32:55
【问题描述】:

我在这里以某种方式错误地设置了我的模型,我看不到它。我看过这个问题:

Node.js - Mongoose path validation failing - TypeError: Cannot call method 'validate' of undefined

我认为这不是我想要的解决方案。我正在尝试设置一个包含一个嵌套对象和另一个嵌套对象数组的简单文档。我不断收到此错误:

Cannot read property 'validate' of undefined

这是我要运行的代码。

var mapSchema = new Schema({
map_key : {
    i : {
        type : Number,
        required : 'Map Key i required'
    },
    j : {
        type : Number,
        required : 'Map Key j required'
    },
    k : {
        type : Number,
        required : 'Map Key k required'
    }
},
tiles : [ {
    x : {
        type : Number,
        required : 'Tile x required'
    },
    y : {
        type : Number,
        required : 'Tile y required'
    },
    tile_type : {
        type : Number,
        required : 'Tile type required'
    }
} ]
});

mapSchema.path('map_key').validate(function(value, next) {
    mapService.findMap(value, function(err, map) {
        if (err) {
            console.log(err);
            return next(false);
        }
        next(!map);
    });
}, 'Map already created');

感谢任何帮助。谢谢!

更新:无论价值如何,我都尝试将模型简化为最简单的形式,但没有成功:

var mapSchema = new Schema({
map_key : {
    i :  Number,

    j : Number,

    k :  Number

},
tiles : [ {
    x :  Number,

    y :  Number,

    tile_type : Number
} ]
});

mapSchema.path('map_key').validate(function(value, next) {
    mapService.findMap(value, function(err, map) {
        if (err) {
            console.log(err);
            return next(false);
        }
        next(!map);
    });
}, 'Map already created');

更新..再次..所以我去删除 map_key 对象并将验证器更改为 tiles 对象以尝试缩小范围。删除 map_key 对象时没有收到错误消息:

var mapSchema = new Schema({
tiles : [ {
    x :  Number,

    y :  Number,

    tile_type : Number
} ]
});

mapSchema.path('tiles').validate(function(value, next) {
mapService.findMap(value, function(err, map) {
    if (err) {
        console.log(err);
        return next(false);
    }
    // If the map exists, return false, else it will be null.
    next(!map);
});
}, 'Map already created');

所以我的猜测是错误与 map_key 及其设置方式有关,但我仍然没有任何问题。

【问题讨论】:

    标签: javascript node.js mongoose


    【解决方案1】:

    好的..所以我让它工作了。不完全确定为什么会这样,文档中的所有内容都以我最初在上面的方式显示。我必须将整个 map_key 对象放在它自己的类型中。再次不确定为什么会这样,但至少我又开始运行了。这是我的解决方案,对于可能遇到类似问题的其他人来说是值得的。

    var mongoose = require('mongoose');
    var Schema = mongoose.Schema;
    var mapService = require('../services/map-service');
    
    var mapSchema = new Schema({
        map_key : {type:{
            i : {
                type : Number,
                required : 'Map Key i required'
            },
            j : {
                type : Number,
                required : 'Map Key j required'
            },
            k : {
                type : Number,
                required : 'Map Key k required'
            }
        }},
        tiles : [{
                x : {
                    type : Number,
                    required : 'Tile x required'
                },
                y : {
                    type : Number,
                    required : 'Tile y required'
                },
                tile_type : {
                    type : Number,
                    required : 'Tile type required'
                }
            }
        ]
    });
    
    mapSchema.path('map_key').validate(function(value, next) {
        mapService.findMap(value, function(err, map) {
            if (err) {
                console.log(err);
                return next(false);
            }
    
            next(!map);
        });
    }, 'Map already created');
    
    var Map = mongoose.model('Map', mapSchema);
    
    module.exports = {
        Map : Map
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-24
      • 2021-07-07
      • 1970-01-01
      • 1970-01-01
      • 2016-09-22
      • 2018-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多