将RedisDB与Express-Gateway一起使用如何从.ENV中读取数据库凭据?

问题描述

我正在使用Redis数据库在Heroku上使用express-gateway。 我想知道如何将Redis凭证设置为唯一的URL参数,而不是使用 分离的变量。

现在,Express Gateway从文件system.config.yml中读取凭据,其中凭据结构为

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

不幸的是,Heroku上的Redis自动以URL的形式将凭据设置为.ENV变量:

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

如何使express-gateway从.ENV而不是system.config.yml读取凭据?或者,如何使system.config.yml从.ENV读取整个URL?

甚至更糟的是,凭据不是永久的,并且会定期更改而不会发出警报。 那么,如何使express-gateway连接到Heroku上的Redis

谢谢

解决方法

Express Gateway的配置文件support environment variables-检查一下,您应该就可以了!

,

我以这种方式解决:在启动网关之前先拆分Var,然后设置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}