Я пытаюсь прибавить к общей стоимости своей корзины, но получаю эту ошибку. Вот соответствующая модель пользователя:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const userSchema = new Schema({
name: {
type: String,
required: true
},
email: {
type: String,
required: true
},
cart: {
items: [{
productId: { type: Schema.Types.ObjectId, ref: 'Product', required: true },
quantity: { type: Number, required: true }
}],
totalPrice: { type: Number, default: 0, required: true }
}
});
userSchema.methods.addToCart = function(product) {
const cartProductIndex = this.cart.items.findIndex(cp => {
return cp.productId.toString() === product._id.toString();
});
let newQuantity =1;
const updatedCartItems = [...this.cart.items];
if (cartProductIndex >= 0) {
newQuantity = this.cart.items[cartProductIndex].quantity + 1;
updatedCartItems[cartProductIndex].quantity = newQuantity;
}
else {
updatedCartItems.push({
productId: product._id,
quantity: newQuantity});
}
//updatedTotalPrice = updatedTotalPrice + prodPrice;
const updatedCart = {
items: updatedCartItems
};
this.cart = updatedCart;
this.cart.totalPrice += product.price;
return this.save();
}
module.exports = mongoose.model('User', userSchema);
Вот ошибка, с которой я сталкиваюсь:
Error [ValidationError]: User validation failed: cart.totalPrice: Cast to Number failed for value "NaN" at path "cart.totalPrice"
at ValidationError.inspect (C:\Users\Bhowal Soham\Desktop\NODE_Project\node_modules\mongoose\lib\error\validation.js:61:24)
at formatValue (internal/util/inspect.js:563:31)
at inspect (internal/util/inspect.js:221:10)
at formatWithOptions (internal/util/inspect.js:1693:40)
at Object.Console.<computed> (internal/console/constructor.js:272:10)
at Object.log (internal/console/constructor.js:282:61)
at C:\Users\Bhowal Soham\Desktop\NODE_Project\controllers\shop.js:69:25
at processTicksAndRejections (internal/process/task_queues.js:93:5) {
errors: {
'cart.totalPrice': MongooseError [CastError]: Cast to Number failed for value "NaN" at path "cart.totalPrice"
at new CastError (C:\Users\Bhowal Soham\Desktop\NODE_Project\node_modules\mongoose\lib\error\cast.js:29:11)
at model.$set (C:\Users\Bhowal Soham\Desktop\NODE_Project\node_modules\mongoose\lib\document.js:1236:9)
at Document.set [as totalPrice] (C:\Users\Bhowal Soham\Desktop\NODE_Project\node_modules\mongoose\lib\helpers\document\compile.js:148:26)
at model.userSchema.methods.addToCart (C:\Users\Bhowal Soham\Desktop\NODE_Project\models\user.js:50:28)
at C:\Users\Bhowal Soham\Desktop\NODE_Project\controllers\shop.js:63:21
at processTicksAndRejections (internal/process/task_queues.js:93:5) {
stringValue: '"NaN"',
kind: 'Number',
value: NaN,
path: 'cart.totalPrice',
reason: [MongooseError],
message: 'Cast to Number failed for value "NaN" at path "cart.totalPrice"',
name: 'CastError'
}
},
_message: 'User validation failed',
name: 'ValidationError'
}
Я не совсем понимаю точку "NaN" моей ошибки. Я имею в виду, что я прочитал go через кучу похожих сообщений на эту тему, и у большинства из них возникла проблема не устанавливать по умолчанию значение 0, что я и сделал в своем определении схемы. Также в файле приложения. js я инициализирую массив элементов корзины и totalPrice с пустыми значениями и 0, так что это не является причиной моей проблемы.
Примечание: имя пользователя и пароль были изменены в строке подключения для конфиденциальности, проблема не с ними.
mongoose.connect('mongodb+srv://Username:<password>@nodeproject-37zzb.mongodb.net/shop?retryWrites=true&w=majority', {
useNewUrlParser: true,
useUnifiedTopology: true
})
.then(result => {
User.findOne().then(user => {
if (!user) {
const user = new User({
name: 'Max',
email: 'test@test.com',
cart: {
items: [],
totalPrice: 0
}
});
user.save();
}
});
app.listen(3000);
}).catch(err => console.log(err));
Есть предложения относительно того, что может быть не так?