程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了MongooseError:操作 `users.findOne()` 缓冲在 10000 毫秒后超时大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决MongooseError:操作 `users.findOne()` 缓冲在 10000 毫秒后超时?

开发过程中遇到MongooseError:操作 `users.findOne()` 缓冲在 10000 毫秒后超时的问题如何解决?下面主要结合日常开发的经验,给出你关于MongooseError:操作 `users.findOne()` 缓冲在 10000 毫秒后超时的解决方法建议,希望对你解决MongooseError:操作 `users.findOne()` 缓冲在 10000 毫秒后超时有所启发或帮助;

这是我的连接文件


const connectDB = async () =>{
        const conn = await new mongoose("mongodb+srv://nikunj:gadia7420@cluster0.94xph.mongodb.net/myFirstDatabase?retryWrites=true&w=majority",{
            usenewurlparser:true,usecreateindex:true,usefindmodify:true,useunifIEdtropology:true,urlencoded:true
        })
}
module.exports = connectDB;

这是我的模型文件


const userscheR_836_11845@a = new mongoose.scheR_836_11845@a({
    username:{
        type:string,required:true
    },avatar:{
        type:string,},email:{
        type:string,password:{
      type  : String,required:true
    }
});
module.exports = mongoose.model('user',userscheR_836_11845@a);

此文件将插入或从数据库中获取信息以进行注册

const express = require('express');
const router = express.Router();
const User = require('../models/user');
const bcrypt= require('bcrypt');

router.post('/register',async(req,res,next)=>{
    const  {username,email,passworD}=req.body;
    try{
        let user_exist = await User.findOne({email:email});
        if(user_exist){
            @R_772_6048@s="false";
            msg="user already exist";
        } else {
            //imporTing data to models
            let user = new User();
            user.username = username;
            user.email = email ;
            const salt = await bcrypt.genSalt(10);
            user.password =  await bcrypt.hash(password,salt),user.avatar =  "https://gravatar.com/avatar/?s=200&d=retro"
            await user.save();
            res.Json({
                sucess:true,user:user,msg:"user registered"
            })
        }
    }
    catch(err){
        console.log(err);
    }
});

module.exports = router;

这是我的主文件 (server.Js)

const express = require('express');
const morgan = require('morgan');
const colors = require('colors');
const dotenv = require('dotenv');
const mongoose = require('mongoose');
const connectDB = require('./config/db');
//creaTing main platform
connectDB;
console.log(mongoose.connection.readyStatE);
const app = express();
app.use(morgan('dev'));
dotenv.config({
    path:'./config/config.env'
})
app.use(express.Json({}))
app.use(express.Json({
    extended:true
}))

//creaTing server
app.use('/API/todo/auth',require('./routes/user'));
const Port = process.env.port;
app.Listen(Port,console.log(`Listening on port :${Port}` .red.underline.bold));
//creaTing req,res platform

但是在运行这个之后它在给出发布请求时显示错误

@H_754_5@mongooseError: Operation `users.findOne()` buffering timed out after 10000ms
    at Timeout.<anonymous> (D:\nikunj\ProgrAMMing\todoapp\node_modules\mongoose\lib\drivers\node-mongodb-native\collection.Js:185:20)
    at ListOnTimeout (node:internal/timers:556:17)
    at processtimers (node:internal/timers:499:7)

请为此找到解决方案。谢谢。对不起,如果这是一个愚蠢或错误的问题,因为我是这个 nodeJs 的新手

解决方法

首先连接到您的数据库,然后启动您的服务器。

您试图在没有连接到数据库的情况下查询数据库。

https://mongoosejs.com/docs/connections.html#buffering

@H_399_2@mongoose 让您可以立即开始使用您的模型,而无需等待 mongoose 与 MongoDB 建立连接。

是因为猫鼬在内部缓冲模型函数调用。这种缓冲很方便,但也是一个常见的混淆源。如果您使用没有连接的模型,Mongoose 默认不会抛出任何错误。


connectDB()
    .then(() -> {
        app.listen(Port,console.log(`listening on port :${Port}` .red.underline.bold));
    }).catch((E) => {
        console.log(E);
    })

您没有调用函数 connectDB

,

在尝试写入之前打开您的 Mongo 服务器并连接到您的数据库。

,

就我而言,我使用的是 monorepo,一个包启动服务器,另一个包包含猫鼬模型。

其中一个软件包在其 package.json 的依赖项上具有不同的 mongoose 版本。

在确保两个包具有相@R_772_11197@的 mongoose,然后在 monorepo 的根目录运行 yarn 以正确重新链接依赖项后,问题得到解决。


对于任何想知道的人,我可以在 monorepo 中的两个不同的包上使用 mongoose,因为 mongoose 基本上是一个单例类,这意味着它通常会尝试使用预先存在的 mongoose 实例,而无需初始化.

有两个版本的 mongoose 破坏了这种单例功能,因为(就 Node 而言)服务器上的实例是使用与我的模型包中不同的 mongoose 包创建的。


TL;DR 确保您的 monorepo 中依赖于 mongoose 的任何包在其各自的 package.json 文件中具有相@R_772_11197@的 mongoose。

,

这个问题已经有人回答了,但是当我遇到同样的问题时,原因却大不相同。出于某种原因,我将 Mongodb 连接 URI 放在配置变量的引号内。永远不要那样做。当我删除引号时,一切正常。

大佬总结

以上是大佬教程为你收集整理的MongooseError:操作 `users.findOne()` 缓冲在 10000 毫秒后超时全部内容,希望文章能够帮你解决MongooseError:操作 `users.findOne()` 缓冲在 10000 毫秒后超时所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。