[英]How to update and delete a review of a product using nodejs
I am creating a e-commerce app and now I want to update and delete a review of a product using nodejs and database is mongoDB (using mongoose).我正在创建一个电子商务应用程序,现在我想使用 nodejs 更新和删除对产品的评论,数据库是 mongoDB(使用 mongoose)。 This is my User Schemas and Product Schema:这是我的用户模式和产品模式:
const userSchema = new Schema(
{
name: { type: String, required: true },
email: { type: String, required: true, unique: true, trim: true },
password: { type: String, required: true, trim: true },
isAdmin: { type: Boolean, required: true, default: false },
},
{
timestamps: true,
}
);
const productSchema = new Schema({
user: {
type: Schema.Types.ObjectId,
required: true,
ref: "users",
},
name: { type: String, required: true },
image: { type: String, required: true },
brand: { type: String, required: true },
category: { type: String, required: true },
description: { type: String, required: true },
reviews: [
{
name: { type: String, required: true },
rating: { type: Number, required: true },
comment: { type: String, required: true },
user: {
type: Schema.Types.ObjectId,
required: true,
ref: "users",
},
},
{
timestamps: true,
},
],
rating: { type: Number, required: true, default: 0 },
reviewNumber: { type: Number, required: true, default: 0 },
price: { type: Number, required: true, default: 0 },
countInStock: { type: Number, required: true, default: 0 },
});
I completed the create function but I don't know how to implement update and delete function, this this my create function:我完成了创建功能,但我不知道如何实现更新和删除功能,这是我的创建功能:
//* desc Create review
//* route POST /product/:id/review
//* access Private
const createReview = async (req, res) => {
const { rating, comment } = req.body;
if (!rating || !comment) {
return res.status(400).json({
success: false,
message: "Missing infomation",
});
}
try {
const product = await Product.findById(req.params.id);
if (!product) {
return res.status(400).json({
success: false,
message: "Product is not found",
});
}
const review = product.reviews;
const alreadyReviewed = product.reviews.find(
(i) => i.user.toString() === req.user._id.toString()
);
if (alreadyReviewed) {
return res.status(400).json({
success: false,
message: "User have already reviewed this product",
});
}
const newReview = {
name: req.user.name,
rating: 0 || Number(rating),
comment,
user: req.user._id,
};
review.push(newReview);
product.reviewNumber = review.length;
product.rating =
review.reduce((acc, item) => item.rating + acc, 0) / review.length;
await product.save();
return res.status(200).json({
success: true,
message: "Create review successfully",
product,
});
} catch (error) {
console.log(error);
return res.status(500).json({
success: false,
message: "Internal server error",
});
}
};
So how can I implement update and delete function?那么如何实现更新和删除功能呢?
I am assuming according to your code one product can have only one review per user.我假设根据您的代码,一个产品每个用户只能有一个评论。
//* desc update review
//* route PUT /product/:id/review
//* access Private
const createReview = async (req, res) => {
const { rating, comment } = req.body;
if (!rating || !comment) {
return res.status(400).json({
success: false,
message: "Missing infomation",
});
}
try {
const product = await Product.findById(req.params.id);
if (!product) {
return res.status(400).json({
success: false,
message: "Product is not found",
});
}
const reviews = product.reviews;
const foundReviewIndex = product.reviews.findIndex(
(i) => i.user.toString() === req.user._id.toString()
);
if (foundReviewIndex === -1) {
return res.status(400).json({
success: false,
message: "Review not found",
});
}
reviews[foundReviewIndex].rating = rating ? Number(rating) : 0,
reviews[foundReviewIndex].comment = comment,
product.rating =
review.reduce((acc, item) => item.rating + acc, 0) / review.length;
await product.save();
return res.status(200).json({
success: true,
message: "Updated review successfully",
product,
});
} catch (error) {
console.log(error);
return res.status(500).json({
success: false,
message: "Internal server error",
});
}
};
Similarly, you can write a function for deleting a review.同样,您可以编写一个删除评论的函数。 I suggest you create a separate collection for reviews and keep both product and user references in the review schema.我建议您为评论创建一个单独的集合,并将产品和用户引用保留在评论模式中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.