当前位置: 首页 > 知识库问答 >
问题:

在NodeJS服务器中为多个客户提供多个生产环境

秦禄
2023-03-14

在研究了很多之后,我找不到任何类似的东西来帮助我解决这个问题。

我有一个节点服务器,有几个环境(开发,测试,演示,生产)。 此服务器通过服务部署在Linux服务器上的生产中。

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

示例:我有两个URL: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();
    });

它似乎工作,但它似乎不是非常稳定或非常可靠的我,我错了吗?

我可以用什么更好的方法来分离数据,以便没有可以从Customer2接收数据的customer1?

谢谢你的帮助!

共有1个答案

曾承弼
2023-03-14

跟随你原帖子下的所有评论,你需要做这样的事情:

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
 类似资料:
  • 问题内容: 我为一项服务有不同的软件产品,需要将其部署到一台服务器上。在服务器运行Node.js和Express的同时,客户端通过react进行构建,并通过create- react-app进行构建设置。 当我从服务器为单个应用程序提供服务时,可以通过以下方式完成: 我希望能够从服务器提供多个应用程序。我该怎么办? 我尝试的是为资产连接不同的静态路径,并使用不同的名称分隔客户端,尽管这样做不起作用

  • 问题内容: 我正在使用RMI编写密码系统的原型。 我有一个问题,因为当我启动两个客户端时,它们从OneTimePad类的服务器中的一个对象获得了响应。 因此客户端A获取为客户端b保留的密钥,由于特定的算法,这种情况不会发生。 服务器仅向客户端发送E和N变量(例如在RSA中),因此我无法序列化OneTimePad对象并通过网络发送它(因为它将具有所有密钥)。 如何为每个客户端创建OneTimePad

  • 我们的主要应用程序在端口8443上提供服务,我们使用在端口8444上提供执行器endpoint服务。 有没有办法让一个endpoint(健康endpoint)同时服务于8443和8444,而将其余endpoint仅保留在端口8444上?

  • 我用代理ip列表在我的kafka生产者/消费者/流应用程序中配置。但我想移动到一个url条目,该条目将通过DNS查找当前称为up的代理ip来解析(DNS主动检查集群中的代理并使用IP短TTL[10s]响应查找)。这让我在未来添加代理时具有更大的灵活性,并且我可以在所有环境/阶段的应用程序中保持相同的配置。这是推荐的方法吗,还是这会消除客户端没有严格代理列表的弹性?我假设此配置仅用于最初“发现”集群

  • 我能够让eureka服务器以点对点模式运行。但我很好奇的一件事是如何让服务发现客户端注册到多个eureka服务器。 我的用例如下:<br>假设我有一个服务注册到其中一个eureka服务器(例如服务器a),并且该注册被复制到它的对等服务器。服务实际上指向服务器A。如果服务器A停机,客户机希望与服务器A续费,如果服务器A不再存在,续费如何工作。我是否需要同时向这两个服务器注册?如果不是,那么如果客户端

  • 我实现了一个相当简单的服务器,可以处理多个客户端,我首先接受这样的客户端 从我所读到的内容来看,似乎通常会为每个客户端创建一个新线程,但如果有更简单的方法,我真的不认为有必要解决这个问题。我只需要能够在服务器和客户端之间发送和接收消息。 有没有简单的方法 监听传入消息 确定消息来自哪个客户端 解析消息等。 都在一个循环中,而不为每个客户端创建单独的线程?

  • 如何处理多个客户端连接到一个服务器?我有这个logserver.java 和一个嵌入式applet,其中包含如下所示的部分代码,例如 现在的问题是,如果我在服务器上运行“Java日志服务器”,它将打开应用程序并等待输入流,如果我打开我的站点,它将开始流日志。但如果我使用其他计算机/网络再打开一个站点,第二个站点不会记录流。似乎是因为第一个仍然绑定到端口5000。 我该怎么处理?socket实际上是