Nodejs with koa and Mongo - MongooseError: You can not `mongoose.connect()` multiple times while connected
Nodejs with koa and Mongo - MongooseError: You can not `mongoose.connect()` multiple times while connected
我在带有 koa 的 nodejs 中的 aws 机器中有一个应用程序,这个应用程序与另一台 aws 机器上的 mongodb 连接。我得到的错误是 MongooseError: You can not
mongoose.connect()multiple times while connected.
我也是 运行 带有 pm2
的应用程序
这是连接到数据库的代码:
const mongoose = require('mongoose');
const { transform } = require('koa-bootstrap-service/lib/plugins');
const url = require('url');
const config = require('../../config/index');
mongoose.Promise = Promise;
function makeMongoUrl() {
const dbSettings = config.mongoDb;
if (!dbSettings) {
return false;
}
if (dbSettings.url) {
return dbSettings.url;
}
const urlObj = {
hostname: dbSettings.host,
port: dbSettings.port,
pathname: `/${dbSettings.db}`,
query: dbSettings.options,
protocol: 'mongodb',
slashes: true,
};
if (dbSettings.username) {
urlObj.auth = `${dbSettings.username}:${dbSettings.password || ''}`;
}
return url.format(urlObj);
}
function connectMongoDb() {
mongoose.plugin(transform.middleware());
mongoose
.connect(makeMongoUrl(), {
useNewUrlParser: true,
useCreateIndex: true,
useFindAndModify: false,
keepAlive: 1,
connectTimeoutMS: 30000,
reconnectTries: 30,
})
.then(() => {
global.Logger.debug('Mongoose Connected');
})
.catch(({ stack }) => {
global.Logger.error(stack);
process.exit(0);
});
}
connectMongoDb();
引用:
In mongoose version 5.6.1 the check was added https://github.com/Automattic/mongoose/pull/7905
Revert to an older version for a quick fix.
如果在 package.json 中,mongoose 版本是这样的:^5.x.y
然后插入符号 ^
将使其更新到最近的 minor 版本,即最高 x
(像 5.9.y
但不是 6.x.y
)。
所以必须强制使用旧版本。
更新: 根据这个答案:
必须删除任何控制器文件中的任何其他连接,只有主文件能够建立连接。
我在带有 koa 的 nodejs 中的 aws 机器中有一个应用程序,这个应用程序与另一台 aws 机器上的 mongodb 连接。我得到的错误是 MongooseError: You can not
mongoose.connect()multiple times while connected.
我也是 运行 带有 pm2
这是连接到数据库的代码:
const mongoose = require('mongoose');
const { transform } = require('koa-bootstrap-service/lib/plugins');
const url = require('url');
const config = require('../../config/index');
mongoose.Promise = Promise;
function makeMongoUrl() {
const dbSettings = config.mongoDb;
if (!dbSettings) {
return false;
}
if (dbSettings.url) {
return dbSettings.url;
}
const urlObj = {
hostname: dbSettings.host,
port: dbSettings.port,
pathname: `/${dbSettings.db}`,
query: dbSettings.options,
protocol: 'mongodb',
slashes: true,
};
if (dbSettings.username) {
urlObj.auth = `${dbSettings.username}:${dbSettings.password || ''}`;
}
return url.format(urlObj);
}
function connectMongoDb() {
mongoose.plugin(transform.middleware());
mongoose
.connect(makeMongoUrl(), {
useNewUrlParser: true,
useCreateIndex: true,
useFindAndModify: false,
keepAlive: 1,
connectTimeoutMS: 30000,
reconnectTries: 30,
})
.then(() => {
global.Logger.debug('Mongoose Connected');
})
.catch(({ stack }) => {
global.Logger.error(stack);
process.exit(0);
});
}
connectMongoDb();
引用:
In mongoose version 5.6.1 the check was added https://github.com/Automattic/mongoose/pull/7905
Revert to an older version for a quick fix.
如果在 package.json 中,mongoose 版本是这样的:^5.x.y
然后插入符号 ^
将使其更新到最近的 minor 版本,即最高 x
(像 5.9.y
但不是 6.x.y
)。
所以必须强制使用旧版本。
更新: 根据这个答案:
必须删除任何控制器文件中的任何其他连接,只有主文件能够建立连接。