簡體   English   中英

在 NodeJS Server 中為多個客戶提供多個生產環境

[英]Have multiple production environment for multiple customers in NodeJS Server

經過大量研究后,我找不到任何類似的東西來幫助我解決這個問題。

我有一個節點服務器,有幾個環境(開發、測試、演示、產品)。 該服務器通過服務部署在 Linux 服務器上的生產環境中。

我需要能夠為幾個不同的客戶提供多個生產環境。

示例:我有 2 個網址: https://customer1.comhttps://customer2.Z20C50Z6D1950DA4 這兩個客戶端的代碼是相同的,只是 url 改變了。

對於服務器來說,它必須能夠識別哪個客戶端正在向它發送請求,因為要發送回客戶端的數據是不一樣的。 customer1 的數據庫與 customer2 的數據庫不同。 因此,服務器必須進行區分,以便僅返回與發出請求的客戶端有關的數據。

我的問題:如何實現這一目標? 我想避免為每個客戶端部署 1 個服務器,我知道這會更簡單,但可維護性較差。

目前,我正在使用 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 就可以查詢任何客戶的數據,現在已經不可能了。

更好的方法是,如果您不想在 session 中保留客戶端名稱,您可以執行 2 個查詢 - 第一個查詢獲取登錄用戶的客戶端名稱,第二個查詢類似於上面的代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM