Javascript 无法读取属性';验证';未定义的
不知为什么,我在这里设置的模型不正确,我看不到它。我已经研究过这个问题: 我认为这不是我想要的解决方案。我正在尝试设置一个简单的文档,其中包含一个嵌套对象和另一个嵌套对象数组。我不断地发现这个错误:Javascript 无法读取属性';验证';未定义的,javascript,node.js,mongoose,Javascript,Node.js,Mongoose,不知为什么,我在这里设置的模型不正确,我看不到它。我已经研究过这个问题: 我认为这不是我想要的解决方案。我正在尝试设置一个简单的文档,其中包含一个嵌套对象和另一个嵌套对象数组。我不断地发现这个错误: Cannot read property 'validate' of undefined 这是我试图运行的代码 var mapSchema = new Schema({ map_key : { i : { type : Number, required :
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_键和它的设置方式有关,但我仍然不知道它出了什么问题。好的。。所以我让它工作了。不完全确定为什么会这样,文档中的所有内容都显示了我最初的方式。我必须将整个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
};