MongooseError:操作``users.findOne()''的缓冲在10000毫秒后超时 [英] MongooseError: Operation `users.findOne()` buffering timed out after 10000ms

查看:786
本文介绍了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 userSchema = new mongoose.Schema({
    username:{
        type:String,
        required:true
    },
    avatar:{
        type:String,
    },
    email:{
        type:String,
        required:true
    },
    password:{
      type  : String,
     required:true
    }
});
module.exports = mongoose.model('user',userSchema);

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

this file will insert or take information from database for registeration

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){
            success="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)

this is my main file (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

但是运行此命令后,它在发出发布请求时显示错误

but after running this it shows error while giving post request

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)

pls为此找到了解决方案.谢谢.sorry,如果这是一个愚蠢或错误的问题,因为我是这个Node.js的新手

pls find a solution for this. thanks .sorry if it is a silly or wrong question because I am new to this nodejs

推荐答案

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

Connect to your database 1st and after that start your server.

您试图在不连接数据库的情况下查询数据库.

You're trying to query the database without connecting to your database.

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

Mongoose使您可以立即开始使用模型,而无需等待Mongoose建立与MongoDB的连接.

Mongoose lets you start using your models immediately, without waiting for mongoose to establish a connection to MongoDB.

那是因为猫鼬在内部缓冲了模型函数调用.这种缓冲很方便,但也是造成混乱的常见原因.如果您使用未连接的模型,默认情况下,猫鼬将不会引发任何错误.

That's because mongoose buffers model function calls internally. This buffering is convenient, but also a common source of confusion. Mongoose will not throw any errors by default if you use a model without connecting.


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


您没有调用函数 connectDB

这篇关于MongooseError:操作``users.findOne()''的缓冲在10000毫秒后超时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆