使用redisdb和express gateway如何从.env读取数据库凭据?

icnyk63a  于 2021-06-08  发布在  Redis
关注(0)|答案(2)|浏览(277)

我正在使用redis数据库来使用heroku上的express网关。我想知道如何将redis凭据设置为唯一的url参数,而不是使用分隔的变量。
现在,express gateway从文件中读取凭据 system.config.yml ,其中凭据结构为


# Core

db:
  redis:
    host: [host]
    port: [port]
    namespace: [namespace]
    password: [password]

不幸的是,heroku上的redis会自动将凭据设置为.env var,格式为url:

REDIS_URL = "redis://h:[psw]@[host]:[port]"

如何使express gateway从.env而不是从.env读取凭据 system.config.yml ? 或者,我该怎么做 system.config.yml 从.env读取整个url?
更糟糕的是,凭据不是永久的,并且会定期更改而不发出警报。那么,如何让express gateway连接到heroku上的redis?
谢谢您

dauxcl2d

dauxcl2d1#

expressgateway的配置文件支持环境变量-检查一下,你应该很好去!

gk7wooem

gk7wooem2#

我这样解决:在启动网关之前拆分变量,并设置env变量。

/* ==============
    server.js
    ================*/
    const gateway = require('express-gateway');
    const redis = require('redis')
    const session = require('express-session')
    let RedisStore = require('connect-redis')(session)
    require('dotenv').config();

      var redis_Url = process.env.REDIS_URL; // auto-stetted by the Redis Heroku Plugin

      // example: redis://h:p81efd4c7e0ad310d7da303b7bd348d3d0bd9fcebc7aae61c9ba7c94a95a1290d@ec2-54-247-152-80.eu-west-1.compute.amazonaws.com:12799

      var groups = /^redis:\/\/(.+?)\:(.+?)\@(.+?)\:(.+)$/gi.exec(redis_Url); 

      process.env.NM   = groups[1];
      process.env.PASW = groups[2];  
      process.env.HOST = groups[3];
      process.env.R_PORT = groups[4]; // !!! don't use PORT as Env var name!!!

      // Run the gateway
      gateway()
      .load(path.join(__dirname, 'config'))
      .run();


# ==============

     # system.config.yml
     #================

        # Core
        db:
          redis: 
            host: ${HOST} 
            port: ${R_PORT} 
            namespace: EG
            password: ${PASW}

相关问题