Node.js的 - 猫鼬路径验证失败 - 类型错误:无法调用未定义的方法“验证”(Node.js

2019-11-03 08:56发布

我有以下的猫鼬的模式和路径validaion:

var locationSchema = new Schema({
    userid: { type: Number, required: true },
    location: {
        type: [{
            type: "String",
            required: true,
            enum: ['Point', 'LineString', 'Polygon'],
            default: 'Point'
        }],
        coordinates: { type: [Number], required:true }

    },
    tags: [{ type: String, index: true, required: true }],
    create_date: { type: Date, default: Date.now }
});


locationSchema.path('location.coordinates').validate(function(coordinates){
        return coordinates && coordinates.toString().match(/([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$/g);
}, 'Invalid latitude or longitude.');

当我开始我的应用程序我得到:

locationSchema.path('location.coordinates').validate(function(coordinates){
                                            ^
TypeError: Cannot call method 'validate' of undefined

任何人都可以建议这是为什么失败? 值得注意的是我只是验证路径(“位置”),它开始罚款。

Answer 1:

要在嵌入式命名对象定义一个字段type ,则需要使用明确的对象表示法来定义它的类型或猫鼬认为它定义父对象的类型,而不是:

var locationSchema = new Schema({
    userid: { type: Number, required: true },
    location: {
        type: { type: [{
            type: "String",
            required: true,
            enum: ['Point', 'LineString', 'Polygon'],
            default: 'Point'
        }]},
        coordinates: { type: [Number], required:true }
    },
    tags: [{ type: String, index: true, required: true }],
    create_date: { type: Date, default: Date.now }
});


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