我对Node.js还比较陌生。我正在使用一个现有的Node.js express应用程序。它在服务器启动时创建一个新的Mongodb连接,并将其分配给一个全局变量以在其他地方使用。所有这些都很好。
#In Server.js
async function startServer() {
logger.info("Connecting to the database...");
clientConnect(dbSecrets).then(function (client){
if (!client) {
logger.error("Error connecting to the DB. Shutting down...", new LogMsg(filename, functionName, null, null).toJSON());
process.exit(-1);
}
global.entityDb = client;
.........
#CLient Creation In Mongo.js
clientConnect: async ( dbSecrets ) => (
client = await (() => (new Promise(( resolve, reject ) => (
MongoClient.connect(`mongodb://${dbSecrets.mongoUsername}:${dbSecrets.mongopassword}@${configuration.db.host}`, {
useNewUrlParser: true,
useUnifiedTopology: true,
family: 4
},
( error, client ) => {
if ( error ) {
logger.error(error);
reject(error);
}
resolve(client);
})
)
)).catch(( error ) => {
logger.error(`(mongo.js - clientConnect()) - ${error.toString()}`);
return false;
})
)()),
clientClose: async ( client ) => {
client.close();
return true;
},
dbSecrets的值在应用程序启动时从Hashicorp Vault Key Value Secret注入,并传递到新的MongoClient中。我想更新应用程序,以利用hashicorp vault数据库,这些用户名/密码值可能会过期。是否可以创建MongoClient,以便如果dbSecrets中的值被更新,那么随后与数据库的重新连接将使用新值?
是否可以以某种方式将全局变量用于URI?
FYI通过在应用程序(Kubernetes Pod中的容器(的使用寿命内不让连接过期,解决了这个问题。它在当前凭据过期之前续订租约,而不是尝试加载新凭据。