下面的代码是我用来连接数据库的。
mongoose.connect(
encodeURI(<REMOTE_CONNECTION_STRING>),
{
socketTimeoutMS: 0,
serverSelectionTimeoutMS: 30000,
heartbeatFrequencyMS: 3000
}
);
// Connect
connectPromise = new Promise((resolve, reject) => {
db = mongoose.connection;
db.on('connected', () => console.log('connected'));
// db.on('open', () => console.log('open'));
db.on('disconnected', () => console.log('disconnected'));
db.on('reconnected', () => console.log('reconnected'));
db.on('disconnecting', () => console.log('disconnecting'));
db.on('close', () => console.log('close'));
// Wait till connection is successful
db.once('open', () => {
console.log("Database connection successful.");
resolve();
})
// Handle connection failure
db.on('error', (error) => {
console.error('Database connection error :' + error)
reject();
});
});
await connectPromise;
当我运行服务器时,最初它工作正常并连接到数据库,我可以进行查询等。但闲置几分钟后,它会抛出 ECONNRESET 错误。
Error: read ECONNRESET
我在这里缺少任何数据库选项吗?
将
keepAlive
选项添加到您的 Mongoose 连接设置中,以在空闲期间保持连接。
mongoose.connect(
encodeURI(<REMOTE_CONNECTION_STRING>),
{
socketTimeoutMS: 600000, // 10 minutes (Adjust as needed)
serverSelectionTimeoutMS: 30000, // Server selection timeout of 30 seconds
heartbeatFrequencyMS: 1000, // Send a heartbeat every 1 second to ensure connection stays alive
keepAlive: true, // Ensure connection is kept alive
keepAliveInitialDelay: 120000, // Send keepAlive ping every 2 minutes (120,000 ms)
useNewUrlParser: true,
useUnifiedTopology: true
}
);