【发布时间】: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 包含会话的模式和模型。如果您还有其他问题,请不要犹豫。谢谢