为了账号安全,请及时绑定邮箱和手机立即绑定

来自 MongoDB 的错误消息“操作 `disneys.insertOne()

来自 MongoDB 的错误消息“操作 `disneys.insertOne()

青春有我 2023-10-20 16:53:57
我目前正在使用 MongoDB 和 Express 创建一个新的 API,目前遇到以下问题:“操作 disneys.insertOne() 缓冲在 10000 毫秒后超时。”我目前正在使用它route.rest来测试我的 API。但是,我不知道我目前做错了什么,有人可以看一下我的Github 存储库吗?这是我设置 API 调用的方式:const express = require("express");const router = express.Router();const Disney = require("../models/disneyCharacter");// Getting all characterrouter.get("/", async (req, res) => {  try {    const character = await Disney.find();    res.json(character);  } catch (err) {    res.status(500).json({ message: err.message });  }});// Getting one Characterrouter.get("/:id", getCharacter, (req, res) => {  res.json(res.character);});// Creating new Characterrouter.post("/", async (req, res) => {  const character = new Disney({    name: req.body.name,    details: req.body.details,  });  try {    const newCharacter = await character.save();    res.status(201).json({ newCharacter });  } catch (err) {    res.status(400).json({ message: err.message });  }});// Updating one characterrouter.patch("/:id", getCharacter, async (req, res) => {  if (req.body.name != null) {    res.character.name = req.body.name;  }  if (req.body.details != null) {    res.character.details = req.body.details;  }  try {    const updateCharacter = await res.character.save();    res.json(updateCharacter);  } catch (err) {    res.status(400).json({ message: err.message });  }});// Deleting one characterrouter.delete("/:id", getCharacter, async (req, res) => {  try {    await res.character.remove();    res.json({ message: "Deleted character" });  } catch (err) {    res.status(500).json({ message: err.message });  }});async function getCharacter(req, res, next) {  let character;  try {    character = await character.findById(req.params.id);    if (character == null) {      return res.status(404).json({ message: "Cannot find character" });    }  } catch (err) {    return res.status(500).json({ message: err.message });  }  res.character = character;  next();}module.exports = router;
查看完整描述

6 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

你的API调用似乎有问题,应该是disneyCharacters而不是disneyCharacter.

另外,可能首先设置本地数据库而不是使用process.env.DATABASE_URL.


查看完整回答
反对 回复 2023-10-20
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

实际上我也遇到了同样的错误。我为解决此错误而执行的步骤是

在 mongodb 中创建数据库时

  1. 允许从任何地方访问(ip 配置)

  2. 选择最近的服务器

这解决了我的问题:)


查看完整回答
反对 回复 2023-10-20
?
墨色风雨

TA贡献1853条经验 获得超6个赞

我遇到了同样的错误。我使用的是 mongoDB Atlas 而不是本地的。对我有用的是删除方法中的选项.connect(我使用 mongoose 连接到 mongodb)。


以前的代码(导致错误的)


mongoose.connect(

  "" + process.env.DB_URL,

  { useUnifiedTopology: true, useNewUrlParser: true, useFindAndModify: false },

  () => { console.log("Connected to DB"); }

)

只需删除该方法中 { } 内的代码即可。


mongoose.connect(

  "" + process.env.DB_URL,

  { },

  () => { console.log("Connected to DB"); }

)


查看完整回答
反对 回复 2023-10-20
?
HUWWW

TA贡献1874条经验 获得超12个赞

在我的应用程序中抛出了相同的错误消息。不同之处在于,我使用的是 MongoDB Atlas,而不是本地 MongoDB。


解决方案:将“+srv”添加到 URL 方案后,问题消失了:


const mongoose = require("mongoose");

mongoose.set('useUnifiedTopology', true);

mongoose.set('useNewUrlParser', true);

mongoose.connect("mongodb+srv://user:password@host/dbname")

.then( () => console.log("connected to DB."))

.catch( err => console.log(err));

package.json 中的依赖项:


"dependencies": {

"mongoose": "^5.11.12",

}

MongoDB 版本 4.2.11


连接字符串在 MongoDB Atlas 前端给出: -> 数据存储 -> 集群 -> 连接 -> 连接你的应用程序


在那里您可以找到一些代码片段。


查看完整回答
反对 回复 2023-10-20
?
湖上湖

TA贡献2003条经验 获得超2个赞

删除这两个:


useCreateIndex: true,

useFindModify: false,

并把这个:


useNewUrlParser: true,

useUnifiedTopology: true

最后的例子:


mongoose.connect(process.env.MONGODB_URL, {

    useNewUrlParser: true,

    useUnifiedTopology: true

}, err => {

    if(err) throw err;

    console.log('Connected to mongodb')

})


查看完整回答
反对 回复 2023-10-20
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

在我的代码中,仅删除了参数 ssl,我正在 digitalOcean 中使用数据库,我的代码是:


    mongoose.Promise=global.Promise; 

    mongoose.connect(process.env.MONGO_URI,{

        useNewUrlParser: true,

        useUnifiedTopology: true,

        ssl: true,

        // tlsCAFile: mongoCertPath, ----> you should remove this line

        socketTimeoutMS:43200000,

    }).then(

        ()=>{ console.log('conected to digitalOcean mongoDB: db_CRM'); },

        err=>{console.log('erro to connect digitalOcean mongoDB:'+err);}


    );


查看完整回答
反对 回复 2023-10-20
  • 6 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信