簡體   English   中英

更新用戶的功能錯誤 [node.js]

[英]Error in function to update an user [node.js]

當我嘗試使用郵遞員更新用戶的個人簡介時出現錯誤。 我使用 mongoDB 作為數據庫。 當我嘗試在響應中發送文檔時,這似乎是一個問題,但我不知道如何解決它

這是不起作用的 userController 代碼:

 module.exports.updateUser = async (req, res) => { if (!ObjectId.isValid(req.params.id)) return res.status(404).send("ID unknown : " + req.params.id); try { await UserModel.findOneAndUpdate( { _id: req.params.id }, { $set: { bio: req.body.bio, }, }, { new: true, upsert: true, setDefaultsOnInsert: true }, (err, docs) => { console.log(docs); if (!err) return res.send(docs); else return res.status(500).json({ message: err }); } ); } catch (err) { return res.status(500).json({ message: err }); } };

錯誤如下:

 node:events:371 throw er; // Unhandled 'error' event ^ Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client at new NodeError (node:internal/errors:371:5) at ServerResponse.setHeader (node:_http_outgoing:573:11) at ServerResponse.header (/home/pt/Documents/back_sport_app/api/node_modules/express/lib/response.js:771:10) at ServerResponse.send (/home/pt/Documents/back_sport_app/api/node_modules/express/lib/response.js:170:12) at ServerResponse.json (/home/pt/Documents/back_sport_app/api/node_modules/express/lib/response.js:267:15) at ServerResponse.send (/home/pt/Documents/back_sport_app/api/node_modules/express/lib/response.js:158:21) at /home/pt/Documents/back_sport_app/api/controllers/userController.js:36:34 at /home/pt/Documents/back_sport_app/api/node_modules/mongoose/lib/model.js:4923:18 at processTicksAndRejections (node:internal/process/task_queues:78:11) Emitted 'error' event on Function instance at: at /home/pt/Documents/back_sport_app/api/node_modules/mongoose/lib/model.js:4925:15 at processTicksAndRejections (node:internal/process/task_queues:78:11) { code: 'ERR_HTTP_HEADERS_SENT' } [nodemon] app crashed - waiting for file changes before starting...

您正在回調函數中發送響應,但是一旦承諾解決(等待),響應就已經發送。

嘗試使用 -

module.exports.updateUser = async (req, res) => {
   if (!ObjectId.isValid(req.params.id))
     return res.status(404).send("ID unknown : " + req.params.id);
 
   try {
      const docs = await new Promise((resolve, reject) => {
         UserModel.findOneAndUpdate(
            { _id: req.params.id },
            {
               $set: {
               bio: req.body.bio,
               },
            },
            { new: true, upsert: true, setDefaultsOnInsert: true },
            (err, docs) => {
               if (err) {
                  reject(err)
               } else {
                  console.log(docs);
                  resolve(docs)  // resolving the promise with docs, instead of sending the response.
               }
            }
         );
      })

      return res.send(docs);  // sending response after the above promise is resolved.
   } catch (err) {
     return res.status(500).json({ message: err });
   }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM