在NodeJS Server中为多个客户提供多个生产环境



经过大量研究,我找不到任何类似的东西来帮助我解决这个问题。

我有一个Node服务器,有几个环境(开发、测试、演示、生产(。该服务器在生产中通过服务部署在Linux服务器上。

我需要能够为几个不同的客户提供几个生产环境。

示例:我有两个网址:https://customer1.com和https://customer2.com.这两个客户端的代码是相同的,只是url发生了变化。

对于服务器来说,它必须能够识别哪个客户端正在向它发送请求,因为要发送回客户端的数据是不同的。customer1的数据库将位于与customer2不同的url上。因此,服务器将不得不进行区分,以便仅返回与发出请求的客户端有关的数据。

我的问题是:如何做到这一点?我希望避免每个客户端部署一台服务器,我知道这会更简单,但维护性较差。

目前,我正在使用Express Session来定义环境。事实上,我有一个中间件,它将在mysql中查找每个客户端的环境变量:

con.connect(function(err) {
if (err) throw err;
con.query(`SELECT * FROM environments WHERE CLIENT_URL = '${req.headers.origin}'`, function(err, result) {
if (err) throw err;
delete result[0].ID;
for (var prop in result[0]) {
req.session[prop] = result[0][prop];
}
next();
});
con.end();
});

它似乎有效,但对我来说似乎不太稳定或不太可靠,我错了吗?

还有什么更好的方法可以用来分离数据,这样就没有customer1可以从customer2接收数据了?

谢谢你的帮助!

根据原始帖子下的所有评论,你需要做这样的事情:

SELECT * FROM environments WHERE CLIENT_URL = '${req.headers.origin}' AND CUSTOMER_NAME 
LIKE yourUserCustomerFromSession

以前,任何用户都可以查询任何客户的数据,只要他们使用该客户的URL,现在这已经不可能了。

更好的方法是,如果你不想在会话中保留客户端名称,你可以做两个查询-第一个是为登录用户获取客户端名称,第二个类似于上面的代码:

SELECT * FROM environments WHERE CLIENT_URL = '${req.headers.origin}' AND 
CUSTOMER_NAME LIKE theClientNameYouJustGotForTheLoggedInUser

最新更新