Ошибка Mongoose при использовании findOneAndUpdate
Я получил ошибку на моей серверной консоли во время обновления моей коллекции заметок, обновление прошло успешно, но я получаю эту ошибку в моей серверной консоли, что-то не так. заранее спасибо
app.post("/todos",async (req, res)=>{
try{
// const small = new Tank({ size: 'small' });
// small.save(function (err) {
// if (err) return handleError(err);
// // saved!
// });
console.log(req.body); //should use console to see
const title = req.body.newNote.title;
const content = req.body.newNote.content;
const noteInput = new Note({
title: title,
content: content
});
noteInput.save(function(err){
if(err){
return handleError(err);
}else{
console.log("Successfully added data into db!");
}
//saved!
});
}catch(err){
console.error(err.message);
}
});
Сообщение об ошибке:
MongooseError: Запрос уже был выполнен: Note.findOneAndUpdate({_id: new ObjectId("61580e469338c1fc3 ... at model.Query._wrappedThunk [as _findOneAndUpdate] (C: \ Users \ xx \ Desktop \ MernToDoV3 \ serverlib \ helpers \ query \ wrapThunk.js:21:19) в C: \ Users \ xx \ Desktop \ MernToDoV3 \ server \ node_modules \ kareem \ index.js:370: 33 в processTicksAndRejection (internal/ process /task_queues.js:77:11) {originalStack: 'Error \ n' + 'в model.Query._wrappedThunk [as _findOneAndUpdate] (C: \ Users \ xx \ Desktop \ MernToDoV3 \ server \ node_modules \ mongoose \ lib \ helpers \ query \ wrapThunk.js:25:28) \ n '+' в C: \ Users \ xx \ Desktop \ MernToDoV3 \ server \ node_modules \ kareem \ index.js:370: 33 \ n '+' в processTicksAndRejection (internal/ process /task_queues.js:77:11)'}
2 ответа
У меня была похожая проблема с этим запросом
query.limit(resPerPage).skip(skip)
.
я прикован
clone()
и это сработало
query.limit(resPerPage).skip(skip).clone()
Вы можете сделать что-то подобное. Вам не нужно использовать обратные вызовы, вместо этого используйте async / await или затем / catch.
Когда вы применяете try / catch к асинхронному коду, все идет не так. Обычно они используются для обнаружения ошибок, когда код синхронный, с использованием различных средств. Обещания предоставили способ отловить ошибку с помощью оператора catch.
app.post("/todos", async (req,res)=>{
try{
// const small = new Tank({ size: 'small' });
// small.save(function (err) {
// if (err) return handleError(err);
// // saved!
// });
console.log(req.body); //should use console to see
const { title, content} = req.body.newNote,
noteInput = new Note({title, content });
const result = await noteInput.save();
if (result) {
// check if the result exist else do something
// if you don't find anything
}
}catch(err){
// any errors in the save will be catch here automatically
console.error(err.message);
}
});
Примечание. Когда вы делаете функцию асинхронной, вам нужно использовать ключевое слово await, чтобы дождаться результатов для асинхронной части функции.