我在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
我该如何解决这个问题?