我正在嘗試更新檔案,但錯誤表明查詢已被執行。
MongooseError:查詢已執行:footballs.updateOne({ date: 'January 4' }, {})
app.post('/api/bookslot', async (req, res) => {
console.log(req.body);
try {
const token = req.headers['x-access-token'];
const decoded = jwt.verify(token, 'secret123');
const email = decoded.email;
const user = await UserModel.findOne({ email: email });
let sportname = req.body.selectedSport.toLowerCase();
const time = req.body.slotTime;
const seats = req.body.availableSeats - 1;
if (!sportname.endsWith('s')) {
sportname = sportname.concat('s');
}
const NewSlotModel = mongoose.model(sportname, slotSchema);
var update = {};
update[time] = seats - 1;
console.log(update);
const a = await NewSlotModel.updateOne(
{ date: req.body.slotDate },
{ $set: update },
function (err, success) {
if (err) return handleError(err);
}
);
return res.json({ status: 'ok' });
} catch (e) {
console.log(e);
res.json({ status: 'error' });
}
});
我哪里錯了?
uj5u.com熱心網友回復:
您在代碼中同時使用 async/await 和回呼,導致 mongoose 拋出錯誤。使用它們的實際效果正是您收到的錯誤型別:
查詢已執行
Mongoose v6 不允許重復查詢。
Mongoose 不再允許執行相同的查詢物件兩次。如果你這樣做了,你會得到一個 Query is already executed 錯誤。執行兩次相同的查詢實體通常表示混合了回呼和承諾,但如果您需要執行兩次相同的查詢,您可以呼叫 Query#clone() 來克隆查詢并重新執行它。見 gh-7398
重復查詢執行
要解決此問題,只需從 await 中洗掉第三個引數
NewSlotModel.updateOne
進行中:
const a = await NewSlotModel.updateOne( { date: req.body.slotDate }, { $set: update } );
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/408006.html
標籤:
上一篇:當我點擊沒有導航的按鈕時,如何在xib(ViewController)中打開xib(ViewController)
下一篇:XMLHttpRequest已被CORS策略阻止:預檢回應中的Access-Control-Allow-Headers不允許請求標頭欄位內容型別
