【问题标题】:Getting buffer timeout error when making a POST request to the database向数据库发出 POST 请求时出现缓冲区超时错误
【发布时间】:2021-06-23 09:24:48
【问题描述】:

当我尝试向数据库发出 POST 请求时出现超时错误:

MongooseError: Operation `sessions.insertOne()` buffering timed out after 10000ms
    at Timeout.<anonymous> (/Users/don-alexantoine/Desktop/BCC-Website/node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js:185:20)
    at listOnTimeout (internal/timers.js:554:17)
    at processTimers (internal/timers.js:497:7)

这一切都是在我将路线放入不同的文件时开始的。我不知道为什么会这样。我以相同的方式创建了 API 端点并且它们可以工作。任何帮助将不胜感激。提前致谢。

代码如下:

Router.js 文件

const express = require('express');
const Session = require('../models/sessions')
const router = new express.Router();

router.get('/', (req, res)=>{

    res.render('home');
});

router.post('/',async (req, res)=>{

    try{
        const session = new Session({

            session_name: req.body.session_name,
            first_name: req.body.fname,
            last_name: req.body.lname,
            room: req.body.room,    
            max_capacity: req.body.max,
            session_time: req.body.time
        });

        console.log(session)
        const newsession = await session.save();

        console.log(newsession)

        res.redirect('/')
    }catch(e)
    {
        console.log(e)
    }
    
})

module.exports = router

Sessions.js 文件

const mongoose = require('mongoose');

const SessionSchema = new mongoose.Schema({

    session_name:{
        type: String,
        required:[true, 'session name is required'],
        trim: true
    },

    first_name:{
        type: String,
        required:[true, 'Speaker last name is required']
    },

    last_name:{
        type: String,
        required: [true, 'Speaker last name is required']
    },

    room:{
        required: [true, 'Room name is required'],
        type: String
    },

    max_capacity: {
        required: [true, 'Room max capacity is required'],
        type: Number,
        
    },

    session_time: {
        required: [true, 'Session time is required'],
        type: String
    },

    room_counts:[{

        count:{
            type: Number,
        },

        time:{
            type: String
        }
    }]
});

const Session = mongoose.model('session', SessionSchema);

module.exports = Session;

主应用文件 (app.js)


const express = require('express');
const path =  require('path');
const mongoose = require('mongoose');
const hbs = require('hbs');
const bodyparser = require('body-parser');
const sessionRouter = require('./routers/session');
const app = express();

const viewPath = path.join(__dirname, '../views');
const partialsPath = path.join(__dirname, '../views/partials');

app.use(bodyparser.urlencoded({extended: true}));
app.use(express.static(path.join(__dirname, '../public')));

app.use(sessionRouter);

app.set('views', viewPath);
app.set('view engine', 'hbs');
hbs.registerPartials(partialsPath);

app.listen(3000 || process.env.PORT, ()=>{

    console.log('server is listening on port 3000');
});

Mongoose.js 文件

const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/bccDB', {useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, useFindAndModify:true});

【问题讨论】:

  • 您能否分享有关您的连接以及您在整个项目中如何处理连接的更多信息? @亚历克斯·安托万
  • 我做了一些修改。基本上,所有请求都位于 router.js 文件中。该文件使用来自 sessions.js 的猫鼬模型。 Sessions.js 包含会话的模式和模型。如果您还有其他问题,请不要犹豫。谢谢

标签: node.js mongodb express


【解决方案1】:

之后,查看下面的代码是我发现的错误

  • const sessionRouter = require('./routers/session'); 您需要将其更改为 const sessionRouter = require('./routers/Router');
  • 其次,您的应用未连接到 MongoDB。您已经创建了该文件,但您从未调用过该文件。我建议您创建一个连接函数,将其导出并在 app.js 中调用它

Mongoose.js

const mongoose = require('mongoose');

function connectDB() {
    mongoose.connect('mongodb://localhost:27017/bccDB', {useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, useFindAndModify:true});
}

module.exports = {
    connectDB
}

并在app.js中初始化它

const { connectDB } = require('./mongoose')

// create a connection to mongodb
connectDB()

此外,您需要以更好的方式处理初始化,以避免由于 DB 错误而导致应用程序崩溃。

【讨论】:

  • 初始化是问题所在。我不知道为什么我遵循教程中的相同步骤并且它有效。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2014-12-04
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 2021-12-21
  • 2021-12-13
  • 2019-04-20
  • 1970-01-01
相关资源
最近更新 更多