我有一个产品集合,它有几个字段。其中一个是"productQuantity",它保存了该产品的编号,它看起来像这样:
const ProductSchema = new Schema({
productName: {
type: String,
unique: true,
required: true,
},
productBrand: {
type: String,
required: true,
},
productPrice: {
type: String,
required: true,
},
productPhoto: {
type: String,
required: true,
},
productQuantity: {
type: Number,
required: true,
},
slug: {
type: String,
unique: true,
},
category: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Category',
},
});
例如,我给10的productQuantity,现在我有10个产品。
我有一个页面,我可以购买该产品,它看起来像这样:
此页面的HTML代码:
<div style="display:flex; justify-content: center;">
<div style="border: 2px solid black;">
<img style="width: 465.16px;" src="<%= productCard.productPhoto %>">
</div>
<div style="border: 2px solid black; display: flex; flex-direction: column;">
<div style="margin:30px;">
<%= productCard.productName %>
</div>
<div style="margin:30px;">
<%= productCard.productBrand %>
</div>
<ul style="margin:30px; list-style-type: none; padding: 0px;">
<li style="margin-bottom: 7px;">Kategori: <%= productCard.category.categoryName %> </li>
<li style="margin-bottom: 7px;">Marka: <%= productCard.productBrand %></li>
<li style="margin-bottom: 7px;">Garanti Süresi: 24 Ay</li>
</ul>
<form method="POST" action="/product/<%= productCard._id %>?_method=PUT" style="display:flex; align-items: center;" novalidate>
<div style="display: flex; border: 2px solid black; margin:30px; border-radius: 20px; overflow: hidden;">
<a id="azalt" style="text-decoration: none; color: black; background-color: antiquewhite; padding: 0px 10px;" href="javascript:void(0)"><i class="icon-minus"></i></a>
<input id="Quantity" style="text-align: center; width:100px;" type="text" value="1" name="quantity">
<a id="arttır" style="text-decoration: none; color: black; background-color: antiquewhite; padding: 0px 10px;" href="javascript:void(0)"><i class="icon-plus"></i></a>
</div>
<button type="submit" style=" margin-right: 20px; width: 200px; height:50px; background-color: green; color: aliceblue; font-weight: 900;">
SATIN AL
</button>
</form>
</div>
</div>
当我单击绿色按钮时,它会根据旁边的数字购买产品数量。
路线
router.route('/:id').put(productController.buyProduct);
以及控制器,
exports.buyProduct = async (req,res) =>{
let boughtItemQuantity = req.body.quantity;
const product = await Product.findById(req.params.id);
product.productQuantity = product.productQuantity - boughtItemQuantity;
product.save();
res.status(200).redirect("/")
}
当工作完成后,它会将用户重定向到列出产品的主页,所以我想做的是,当我有10个产品,而一个用户购买了其中的10个产品时,我希望该产品的文档被删除,这样它就不会出现在主页上。
我试过了
exports.buyProduct = async (req,res) =>{
let boughtItemQuantity = req.body.quantity;
const product = await Product.findById(req.params.id);
product.productQuantity = product.productQuantity - boughtItemQuantity;
product.save();
if(product.productQuantity == 0)
{
await findByIdAndRemove(req.params.id)
}
res.status(200).redirect("/")
}
但我想我不能在同一个控制器中更新和删除,因为它删除了文档,但没有将我重定向到主页面。所以基本上它不工作
所以我不知道如何实现,我应该写一个中间件或其他东西?
先谢了。
1条答案
按热度按时间68bkxrlz1#
您应该对返回
Promise
的save()
函数执行await
操作。此外,您还应该编写
Product.findByIdAndRemove
: