【发布时间】:2021-09-30 17:04:21
【问题描述】:
我有这个函数可以更新 mongoDB 数据库中的preference。
async function updateUserPreference(req, res) {
if (!ObjectId.isValid(req.params.id))
return res.status(400).send("ID unknown : " + req.params.id);
try {
await userModel.findByIdAndUpdate(
req.params.id,
{ $addToSet: { preference: req.body.preference } },
{ new: true },
(err, docs) => {
if (!err) return res.status(201).json(docs);
else return res.status(400).send(err);
}
);
} catch (err) {
return res.status(500).json({ message: err });
}
}
我在 this topic 上发现它适用于 mongoose 版本 5.10.6(确实如此)。你知道为什么吗?
这是我的 db.js 文件:
import mongoose from "mongoose";
import dotenv from "dotenv";
dotenv.config({ path: "./config/.env" });
mongoose
.connect(
"mongodb+srv://" +
process.env.passwordDB +
"@cluster0.ecf8q.mongodb.net/testTech",
{
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
useFindAndModify: false,
}
)
.then(() => console.log("connected"))
.catch((err) => console.log("Failed to connnect to DB", err));
export default mongoose;
当我使用最新版本的 mongoose 时,我删除了 useCreateIndex: true 和 useFindAndModify: false
在邮递员中我有这个错误:
{
"message": {
"originalStack": "Error\n at model.Query._wrappedThunk [as _findOneAndUpdate] (D:\\Programmation\\mern\\node_modules\\mongoose\\lib\\helpers\\query\\wrapThunk.js:25:28)\n at D:\\Programmation\\mern\\node_modules\\kareem\\index.js:279:20\n at _next (D:\\Programmation\\mern\\node_modules\\kareem\\index.js:103:16)\n at D:\\Programmation\\mern\\node_modules\\kareem\\index.js:508:38\n at processTicksAndRejections (internal/process/task_queues.js:75:11)"
}
}
在控制台中我有:
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at ServerResponse.setHeader (_http_outgoing.js:561:11)
at ServerResponse.header (/Users/hugobeheray/Documents/JEECE/TestTechniqueJEECE/node_modules/express/lib/response.js:771:10)
at ServerResponse.send (/Users/hugobeheray/Documents/JEECE/TestTechniqueJEECE/node_modules/express/lib/response.js:170:12)
at ServerResponse.json (/Users/hugobeheray/Documents/JEECE/TestTechniqueJEECE/node_modules/express/lib/response.js:267:15)
at file:///Users/hugobeheray/Documents/JEECE/TestTechniqueJEECE/controllers/user.controller.js:35:42
at /Users/hugobeheray/Documents/JEECE/TestTechniqueJEECE/node_modules/mongoose/lib/model.js:4919:18
at processTicksAndRejections (internal/process/task_queues.js:77:11)
Emitted 'error' event on Function instance at:
at /Users/hugobeheray/Documents/JEECE/TestTechniqueJEECE/node_modules/mongoose/lib/model.js:4921:15
at processTicksAndRejections (internal/process/task_queues.js:77:11) {
code: 'ERR_HTTP_HEADERS_SENT'
}
我可以使用 mongoose 5.10.6,但我想知道为什么这不起作用!
【问题讨论】: