gpt4 book ai didi

javascript - mongoskin 和 mongodb 副本集群的连接问题

转载 作者:行者123 更新时间:2023-12-03 10:05:20 44 4
gpt4 key购买 nike

我正在使用 mongoskin npm 模块连接到我的 mongo 数据库副本集群。我尝试了所有可能的方法,但是我的 Nodejs 代码无法建立连接。我可以使用独立连接来连接相同的主数据库,但是当我尝试使用副本服务器时它会失败。以下是更多详情

Code working for standalone: 
var express = require('express');
var app = express();
var mongo = require('mongoskin');
//connect primary as standalone
var db = mongo.db("mongodb://username:password@177.77.66.9:27017/bhs", {native_parser: true});

app.get('/', function (req, res) {
db.bind('goalsfrequencymappings');
db.goalsfrequencymappings.find().toArray(function (err, items) {
res.json(items);
db.close();
});


});

var server = app.listen(8080, function () {

var host = server.address().address;
var port = server.address().port;

console.log('Example app listening at http://%s:%s', host, port);

});

代码不能作为副本服务器工作:

var express = require('express');
var mongo = require('mongoskin');
var app = express();
var Server = mongo.Server;
var Db = mongo.Db;
var ReplSetServers = mongo.ReplSetServers;


var replSet = new ReplSetServers([
new Server('username:password@177.77.66.9:27017', 27017),
new Server('username:password@88.052.72.91', 27017),
new Server('username:password@95.46.865.455', 27017)
]);


var db = new Db('bhs', replSet, {w: 0, native_parser: (process.env['TEST_NATIVE'] != null)});

app.get('/', function (req, res) {

db.collection('goalsfrequencymappings').find().toArray(function (err, items) {

if(err){
console.log("error :"+err);
res.json(err);

} else {
console.log("items :"+items);
res.json(items);
}

db.close();
});

});

var server = app.listen(8080, function () {

var host = server.address().address;
var port = server.address().port;

console.log('Example app listening at http://%s:%s', host, port);

});

它打印以下错误:

Example app listening at http://0.0.0.0:8080
error :Error: No valid replicaset instance servers found

当我使用 cli 连接到集群数据库并运行 status 和 config 命令时,它看起来不错。

myReplicaCluster:PRIMARY> rs.status();
{
"set" : "myReplicaCluster",
"date" : ISODate("2015-05-22T05:18:47Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "177.77.66.9:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 6415902,
"optime" : Timestamp(1432268531, 1),
"optimeDate" : ISODate("2015-05-22T04:22:11Z"),
"electionTime" : Timestamp(1425856025, 11),
"electionDate" : ISODate("2015-03-08T23:07:05Z"),
"self" : true
},
{
"_id" : 1,
"name" : "88.052.72.91:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 6415566,
"optime" : Timestamp(1432268531, 1),
"optimeDate" : ISODate("2015-05-22T04:22:11Z"),
"lastHeartbeat" : ISODate("2015-05-22T05:18:46Z"),
"lastHeartbeatRecv" : ISODate("2015-05-22T05:18:47Z"),
"pingMs" : 4,
"syncingTo" : "177.77.66.9:27017"
},
{
"_id" : 2,
"name" : "95.46.865.455:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 6415543,
"optime" : Timestamp(1432268531, 1),
"optimeDate" : ISODate("2015-05-22T04:22:11Z"),
"lastHeartbeat" : ISODate("2015-05-22T05:18:46Z"),
"lastHeartbeatRecv" : ISODate("2015-05-22T05:18:46Z"),
"pingMs" : 0,
"syncingTo" : "177.77.66.9:27017"
}
],
"ok" : 1
}
myReplicaCluster:PRIMARY> rs.config();
{
"_id" : "myReplicaCluster",
"version" : 5,
"members" : [
{
"_id" : 0,
"host" : "177.77.66.9:27017"
},
{
"_id" : 1,
"host" : "88.052.72.91:27017"
},
{
"_id" : 2,
"host" : "95.46.865.455:27017"
}
]
}

请帮忙。

最佳答案

在关注其他帖子后,我意识到我正在为每个种子传递用户名和密码,这是不需要的。只需遵循 mongodb 连接池语法就可以了。以下是我修改后的代码的详细信息,该代码工作正常并在生产中运行。

 //Set seed mongo replicas.
url = 'mongodb://username:password@177.77.66.9:27017,88.052.72.91:27017,95.46.865.455:27017/dbname?replicaSet=yourReplicaCluster';

// Connect DB
var db = mongoskin.db(url, {native_parser: true, 'auto_reconnect': true, 'poolSize': 100, socketOptions: {
keepAlive: 50,
connectTimeoutMS: 1000,
socketTimeoutMS: 0
}});

// Get documents
getDocumentByQuery: function (collection, callback) {
var query={};
//Add additional filter to exclude soft deleted documents
query.isDeleted = {$ne: true}
DBModule.db.collection(collection).find(query).toArray(function (err, docuemnts) {
if (!err) {
callback(null, docuemnts);
} else {
callback(err, null);
}
});
}

关于javascript - mongoskin 和 mongodb 副本集群的连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30389319/

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