當我嘗試使用郵遞員更新用戶的個人簡介時出現錯誤。我使用 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...
uj5u.com熱心網友回復:
您正在回呼函式中發送回應,但是一旦承諾解決(等待),回應就已經發送。
嘗試使用 -
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 });
}
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/321255.html
標籤:javascript 节点.js MongoDB 猫鼬
上一篇:如何查找包含子串的字串的串列索引
下一篇:獲取MongoDB時更改日期格式
