0

我正在使用 Redis DB 在 Heroku 上使用 Express-Gateway。我想知道如何将 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 而不是读取凭据 system.config.yml?或者,如何system.config.yml从 .ENV 读取整个 URL?

更糟糕的是,凭据不是永久性的,并且会定期更改而不会发出警报。那么,如何让 Express-Gateway 连接到 Heroku 上的 Redis?

谢谢

4

2 回答 2

0

Express Gateway 的配置文件支持环境变量——检查一下,你应该一切顺利!

于 2020-08-28T13:43:27.903 回答
0

我以这种方式解决了:在启动网关之前拆分 Vars,并设置 Env vars。

    /* ==============
    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}

于 2020-08-31T13:28:24.907 回答