新旧评论"/>
我的代码正在添加新评论而不是更新旧评论
这是 productController.js 文件中的 createProductReview 函数。当我添加新评论时,它会被添加但是当我评论它时我希望它应该得到更新而不是添加新评论。
因为每次我为同一用户点击 api 时它都会添加新评论。
我添加了 route , controller 和 productModel 以供参考
ProductController.js
exports.createProductReview = catchAsyncError(async (req, res, next) => {
const { rating, comment, productId } = req.body;
const review = {
user: req.user._id,
name: req.user.name,
rating: Number(rating),
comment,
};
const product = await Product.findById(productId);
const isReviewed = product.reviews.find(
(rev) => rev.user === req.user._id.toString()
);
if (isReviewed) {
product.reviews.forEach((rev) => {
if (rev.user.toString() === req.user._id.toString()) {
rev.rating = rating;
revment = comment;
}
});
} else {
product.reviews.push(review);
product.numOfReviews = product.reviews.length;
}
let avg = 0;
product.reviews.forEach((rev) => {
avg += rev.rating;
});
product.ratings = avg / product.reviews.length;
await product.save({ validateBeforeSave: false });
res.status(200).json({
success: true,
});
});
复习路线
router.route("/review").put(isAuthenticatedUser,createProductReview)
ProductModel.js
const mongoose = require('mongoose')
const productSchema = new mongoose.Schema({
name:{
type:String,
required:[true,"Please enter Product name"]
},
description:{
type:String,
required:[true, "Please enter the product description"]
},
price:{
type:Number,
required:[true,"Please Enter the product price"],
maxLength:[8,"Price cannot exceed 8 char"]
},
ratings:{
type:Number,
default:0
},
images:[
{
public_id:{
type:String,
required:true
},
url:{
type:String,
required:true
}
}
],
category:{
type:String,
required:[true,"Please Enter product category"],
},
Stock:{
type:Number,
required:[true,"Please Enter product stock"],
maxLength:[4,"Stock cannot exceed 4 characters"],
default:1
},
numOfReviews:{
type:Number,
default:0
},
reviews:[
{
name:{
type:String,
required:true,
},
rating:{
type:Number,
required:true
},
comment:{
type:String,
required:true
}
}
],
user:{
type:mongoose.Schema.ObjectId,
ref:"User",
required:true
},
createdAt:{
type:Date,
default:Date.now
}
})
module.exports = mongoose.model("Product", productSchema);
回答如下:
更多推荐
我的代码正在添加新评论而不是更新旧评论
发布评论