我断断续续地从事一个项目已经有一段时间了。最近,在转换到新计算机和路由器后,我的所有端点都没有响应
我采取了一些故障排除步骤,包括:
但是,当我通过邮递员向我的端点发出请求时,猫鼬与 mongodb 的连接似乎意外“断开”。
//User.find and User.findOne timeout
router.get('/all', async (req, res) => {
try {
// Fetch all users
const users = await User.findOne({});
console.log(users);
// Respond with the list of users
res.send(users);
} catch (error) {
console.error('Error fetching users:', error);
res.status(500).json({ error: error.message });
}
});
“错误”:“操作
users.findOne()
缓冲在10000毫秒后超时”
router.get('/check-connection', async (req, res) => {
try {
console.log('working')
console.log(mongoose.connection)
// Ensure the connection is established
if (mongoose.connection.readyState !== 1) {
throw new Error('MongoDB connection not established');
}
// Perform a basic query to the MongoDB server
const result = await mongoose.connection.useDb.admin().ping();
console.log('MongoDB Ping Result:', result);
res.status(200).send('Connection to MongoDB is successful');
} catch (error) {
console.error('Error pinging MongoDB:', error);
res.status(500).json({ error: 'Error connecting to MongoDB: ' + error.message });
}
});
“错误”:“连接到 MongoDB 时出错:未建立 MongoDB 连接” ping MongoDB 时出错:错误:未建立 MongoDB 连接
您对解决此问题的见解将不胜感激。 更多代码如下: 我的应用程序.js https://playcode.io/1945377
我的基本路由器 - users.js https://playcode.io/1945378
哇,我想我已经有一段时间没有从事这方面的工作了,事情已经发生了很大的变化。
每:https://mongoosejs.com/docs/connections.html#keepAlive
如果您使用多个连接,您应该确保导出模式,而不是模型。从文件导出模型称为导出模型模式。导出模型模式有限,因为只能使用一个连接。
const userSchema = new Schema({ name: String, email: String });
导出模型模式的替代方案是导出架构模式。
module.exports = userSchema;
因为如果您导出如下所示的模型,该模型将被限定范围 到 Mongoose 的默认连接。
module.exports = mongoose.model('User', userSchema);
如果您使用导出模式模式,您仍然需要在某处创建模型。有两种常见的模式。第一个是创建一个函数来实例化新连接并注册该连接上的所有模型。使用此模式,您还可以注册与依赖注入器或其他控制反转 (IOC) 模式的连接。
const mongoose = require('mongoose');
module.exports = function connectionFactory() {
const conn = mongoose.createConnection(process.env.MONGODB_URI);
conn.model('User', require('../schemas/user'));
conn.model('PageView', require('../schemas/pageView'));
return conn;
};
导出创建新连接的函数是最灵活的模式。但是,该模式可能会使从路由处理程序或业务逻辑所在的位置访问连接变得困难。另一种模式是导出连接并在文件的顶级范围中注册连接上的模型,如下所示。
// connections/index.js
const mongoose = require('mongoose');
const conn = mongoose.createConnection(process.env.MONGODB_URI);
conn.model('User', require('../schemas/user'));
module.exports = conn;
总而言之,我的连接范围似乎仅限于创建连接的位置,因为我导出的是模型而不是架构。我不知道具体是什么改变使得这成为必要,但这是一个半简单的重组。 希望没有人遇到这种情况,但如果是这样的话。问题来了