Ошибка 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, чтобы дождаться результатов для асинхронной части функции.

Другие вопросы по тегам