Javascript:mongoose中的数据验证错误

时间:2017-02-22 14:40:15

标签: javascript validation mongoose schema

我在Product.model.js文件中写了这段代码:

var mongoose = require('mongoose');
var category = require('../models/category.model');
var dial = require('./dial');

var schema = new mongoose.Schema({
    "name" : {
        type : String,
        required : true
     },
    "pictures" : [{type : String}],
    "price" : {
        "amount" : {
            type : Number,
            set  :function (v) {
                    this.priceInUSD = (v/dial()[this.price.currency] | 1);
                    return v;
            }
        },
        "currency" : {
            type : String,
            required : true,
            enum : ['USD' , 'EUR' , 'IRR'],
            required : true,
            set : function (v) {
                this.priceInUSD = this.price.amount/(dial()[v] | 1)
            }
        }
    },
    "category" : category.category,
    "internal" : {
        "priceInUSD" : {type : Number}
    }
});

exports.schema = schema;

dial.js包含以下代码。它导出一个返回JSON的函数。

exports = function () {
    return {
        "USD" : 1,
        "EUR" : 1.5,
        "IRR" :0.5
    }
};

我希望在更改金额,价格或货币时自动更改priceInUSD属性。为此,我在testRoom.js文件中编写了以下代码。

var mongoose = require('mongoose');
var Category = require('../models/category.model');

mongoose.connect('mongodb://localhost:27017/shop');

var productMDL = require('../models/product.model');

var category = mongoose.model('category' , Category.Schema , 'category');
var Product = mongoose.model('productMDL' , productMDL.schema , 'product');

var category = {
    "_id" : "Products",
    "parent" : "Product",
    "ancestors" : ["Electronic" , "mobile"]
};


var product = new Product({
    "name" : "mesvak",
    "pictures" :["http://www.alamto.com/wp-content/uploads/2015/08/toothbrush.jpg"],
    "price" : {
        "amount" : 50000 ,
        "currency" : 'USD'
    }

});

product.price.amount = 555;

product.validate(function (err) {
    if(err) {
        console.log("NOT VALID" + '\n\n' + err);
        process.exit(1);
    }
    else {
        console.log('valid');
        process.exit(0);
    }
});

但是我收到了验证错误:

NOT VALID

ValidationError: CastError: Cast to String failed for value "USD" at path "price.currency", CastError: Cast to Number failed for value "50000" at path "price.amount"

Process finished with exit code 1

我该如何解决这个问题?

0 个答案:

没有答案