感谢您就以下事项提供任何帮助。在广泛研究以下内容但未发现任何内容时,NodeJS MongoDB 驱动程序似乎存在问题或对 mongoose 的更改导致以下错误:“MongoError:没有可用的 mongos 代理”
例如,使用以下模块时:
const mongoose = require("mongoose");
//Setup with native ES6 Promise Library
mongoose.Promise = Promise;
//Setup UUID type i.e. const { UUID } = mongoose.Types;
require("mongoose-uuid2")(mongoose);
//Extend mongoose object with uuid operations - uuid.v4 method i.e. mongoose.uuid.v4
const uuid = require("uuid/v4");
//Extend mongoose object - Setup bson type - i.e. mongoose.bson
const bson = require("bson");
//Extend mongoose object - Setup Url type i.e. - mongoose.SchemaTypes.Url
require("mongoose-type-url");
//Extend mongoose object - Setup extend_schema i.e. - mongoose.extend_schema();
const extend_schema = require("mongoose-extend-schema");
/*
*Initializes new instance of mongoose, sets up instance, provides reference to instance
*Wires up the models to the instance
*Defaults to test database using uri string
*/
class MongooseSetupService {
constructor(uri = "mongodb://localhost:27017/test", debug = false) {
const db = mongoose.connection;
mongoose.uuid = uuid;
mongoose.bson = bson;
mongoose.extend_schema = extend_schema;
this._database_uri = uri;
this._mongoose = mongoose;
mongoose.connect(this._database_uri, { "useNewUrlParser": true });
mongoose.set("debug", debug);
MongooseSetupService.listen(db);
}
get mongoose () {
return this._mongoose;
}
static listen(db) {
db.on("error", (error) => {
console.error(`MongoDB connection error: ${error}`);
});
db.on("open", () => {
console.log("Connected to MongoDB");
});
db.on("connected", () => {
console.log(`Mongoose default connection open to ${this._database_uri}`);
});
db.on("disconnected", () => {
console.log("Mongoose default connection disconnected");
});
//If the Node process ends, close the Mongoose connection
process.on("SIGINT", () => {
db.close(() => {
console.log("Mongoose default connection disconnected through app termination");
process.exit(0);
});
});
}
}
module.exports = MongooseSetupService;
如果我尝试使用它,例如:
const MongoSetupService = require('./test2')
const mongo_setup_service = new MongoSetupService(
'mongodb://user:password@server-1.domain.com:27017,server-2.domain.com:27017,server-3.domain.com:27017/db?ssl=true&replicaSet=rs0', true
);
我收到以下错误消息:
MongoError: no mongos proxy available
这是 package.json 依赖项
"dependencies": {
"bson": "^3.0.0",
"mongodb": "^3.1.1",
"mongoose": "^5.2.1",
"mongoose-extend-schema": "git+https://github.com/thxmike/mongoose-extend-schema.git",
"mongoose-type-url": "^1.0.4",
"mongoose-uuid2": "^2.1.0",
"uuid": "^3.3.2"
}
最近版本的 Mongoose (5.2.1) 开始发生这种情况,它使用的是 NodeJS MongoDB 驱动程序的 3.1.1。调试日志提供了错误消息。对此问题的任何帮助表示赞赏。
经过进一步调查,选项 { useNewUrlParser: true } 似乎有问题。这是由于连接提供的警告消息而添加的。如果我删除此选项,问题就会消失。此外,如果我从连接字符串 uri 中删除 &replicaSet=rs0,问题就会再次出现。有趣的是这个驱动程序如何使用不同的设置。如果提供有关这些设置的更多信息,那就太好了。