gpt4 book ai didi

node.js - 如何处理 MongoClient 中的超时错误?

转载 作者:IT老高 更新时间:2023-10-28 13:28:57 29 4
gpt4 key购买 nike

我正在使用以下命令将 nodejs 应用程序连接到我的 mongodb 数据库:

const url = 'mongodb://localhost:27017/?replicaSet=rs'
let client = new MongoClient(url, {
useNewUrlParser: true,
connectTimeoutMS: 60000,
socketTimeoutMS: 60000,
})
try {
let dbclient = await client.connect()
console.log(dbclient)
const db = dbclient.db('test')
const collection = db.collection('accounts')
const changeStream = collection.watch(pipeline)
changeStream.on("change", function(change) {
console.log('changed', change)
})
} catch (err) {
console.log('mongo err:', err)
}

这工作得很好,但是它经常在几分钟后失去连接并出现错误:

Uncaught MongoNetworkError: connection 6 to localhost:27017 timed out

根据the documentation它应该会在出错时自动重新连接多达 30 次尝试,但它似乎不会再尝试重新连接。

我还需要在重新连接时运行一些额外的逻辑以正确处理本地状态。

如何捕捉和处理这些错误?

编辑:虽然我仍然没有收到其他事件,但在错误发生后我收到了“重新连接”事件。所以看起来我至少可以对错误使用react,但实际上仍然无法捕捉到它们。

最佳答案

只需添加连接keepAlive: true,或者具体时间keepAlive: 300000

请参见此处的示例:https://ide.c9.io/ibrahimth/mongo

const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');

// Connection URL
const url = 'mongodb://localhost:27017/?replicaSet=rs'
// Database Name
const dbName = 'test';

// create a client, passing in additional options
const client = new MongoClient(url, {
keepAlive: true,
connectTimeoutMS: 60000,
socketTimeoutMS: 60000,
});

// Use connect method to connect to the server
client.connect(function(err) {
assert.equal(null, err);
console.log("Connected correctly to server");
const db = client.db(dbName);
createCollated(db, function() {
client.close();
});


});


function createCollated(db, callback) {
db.createCollection('acount',
{
'collation' :
{ 'acountnam': 'firstacount' }
},

function(err, results) {
console.log("Collection created.");
callback();
}
);
};

更多信息:http://mongodb.github.io/node-mongodb-native/3.0/tutorials/collations/

关于node.js - 如何处理 MongoClient 中的超时错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54528344/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com