在NodeJS中基于客户端配置环境变量

时间:2018-06-05 15:18:20

标签: architecture node-modules

目前我们在服务器端使用NodeJS作为SaaS应用程序。使用REST API,客户端(Web + Android + iOS)连接到NodeJS应用程序。

Nodejs应用程序有一个路由器文件(充当配置文件),它声明全局变量以连接DB,Redis和AWS,如下所示。

enter image description here

现在我们的一个客户希望他们的数据库处于私有状态,这意味着不与其他客户端数据共享。换句话说,这个房客不想和其他房客住在一起。只需将此客户端视为租户“L”,如下所示。虽然NodeJS应用程序保持不变,但客户端“L”的数据将存储在不同的服务器中。

来自Stackoverflow社区的

我需要帮助,了解如何根据客户端请求实现/设置不同的全局变量。我如何配置&根据客户端请求加载全局变量。或者其他可能的方法是什么?

enter image description here

1 个答案:

答案 0 :(得分:0)

@ Da-jin他的问题是全局变量因此需要确定何时使用哪个池。我建议@Vikram创建一个包装器或中间件,它将返回一个配置对象或标识符,这将帮助您在收到请求后立即决定何时使用哪个配置。在任何情况下,都需要进行更改。

或者我建议的一个简单的解决方案是创建全局配置对象,如:

config = { 
    shared: {
         mysqlPool : sharedMySqlPoolObj, 
         redisPool: sharedRedispoolObj
 },
 tenantT: {
        mysqlPool : tMySqlpoolObj,
        redispool: tRedispoolObj
  }
}

无论你在做db或redis连接的哪个地方 只需用以下代码替换您的代码:

例如,如果您正在进行我的SQL连接

 let clientType = getClientType() // shared or tenantT

globalConfig[clientType].mysqlPool.connect(.....);

可能有助于帮助您避免进行重大更改