我正在使用 mern 堆疊創建一個專案。我正在嘗試將專案從我的前端更新到我的后端。當我更新它時它會回傳成功但是當我檢查資料庫時沒有更新?我正在嘗試使用在前端輸入的 prodID 更新產品
這是我的發帖路線
router.post("/updateStock", (req, res) => {
const prodID = req.body.prodID
const product = new Product(req.body)
Product.findOneAndUpdate(prodID, { new: true }, {returnOriginal: false}, function(err, products) {
if (err) {
console.log("err", err);
res.status(500).send(err);
} else {
console.log("success");
res.send(product);
}
});
});
這是我的架構
const mongoose = require("mongoose");
const Product = mongoose.model(
"Product",
new mongoose.Schema({
title: String,
manufacturer: String,
price: String,
catergory: String,
quantity: String,
prodID: String,
images: Array
})
);
module.exports = Product;
uj5u.com熱心網友回復:
在此處關注 Mongoose 檔案
第一個:
您將過濾器添加為字串,但它應該是如下所示的物件
const filter = {prodID: req.body.prodID}
第二:
無需實體化 Product 模式,使用更新物件
const update = req.body
第三:您使用了相同的選項,也new:true代替了更新物件
returnOriginal: false 等價于 new: true
第四:
使用承諾而不是回呼,但是您在呼叫products和發送的回呼中有錯字product
Product.findOneAndUpdate(filter, update, {new: true}).then((product) => {
console.log("success");
res.send(product);
}).catch(err => {
console.log("err", err);
res.status(500).send(err);
})
uj5u.com熱心網友回復:
您沒有將新更新的正文傳遞給findOneAndUpdate. findOneAndUpdate正在期待中db.collection.findOneAndUpdate( filter, update, options )。代碼應該是這樣的: -
router.post("/updateStock", (req, res) => {
const product = new Product(req.body);
const filter = {prodID: req.body.prodID}
Product.findOneAndUpdate(filter, product, { new: true, returnOriginal: false}, function(err, products) {
if (err) {
console.log("err", err);
res.status(500).send(err);
} else {
console.log("success");
res.send(product);
}
});
uj5u.com熱心網友回復:
遵循此架構 =>
db.collection.findOneAndUpdate(filter, update, options)
傳遞更新物件
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/470070.html
