【问题标题】:My code is working with mongoose 5.10.6 but not with the latest version of it我的代码正在使用 mongoose 5.10.6,但不适用于最新版本
【发布时间】: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: trueuseFindAndModify: 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,但我想知道为什么这不起作用!

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    我昨天收到了这个错误。这是因为您同时向客户端发送 2 个响应。

    【讨论】:

    • 好的,但是为什么它与猫鼬以前的版本一起工作呢?
    猜你喜欢
    • 2021-08-20
    • 2013-11-19
    • 2021-05-17
    • 2017-02-15
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多