mongoose.connect 在运行几分钟后抛出 ECONNRESET 错误

问题描述 投票:0回答:1

下面的代码是我用来连接数据库的。

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

我在这里缺少任何数据库选项吗?

node.js mongoose
1个回答
0
投票

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
    }
);
© www.soinside.com 2019 - 2024. All rights reserved.