Node.js 带有 hashicorp Vault 数据库的 MongoClient

Node.js MongoClient with hashicorp Vault databases

我对 Node.js 比较陌生。我正在使用现有的 Node.js 快速应用程序。它在服务器启动时创建一个新的 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 databases 这些用户名/密码值可能会过期的地方。是否可以创建 MongoClient,以便如果更新 dbSecrets 中的值,那么后续与数据库的重新连接将使用新值?

能否以某种方式将全局变量用于 URI?

仅供参考,通过在应用程序(Kubernetes Pod 中的容器)的生命周期内不让连接过期来解决这个问题。它会在当前凭据过期之前续订租约,而不是尝试加载新凭据。