如何在同一主机上 运行 多个 Swaggerize 实例?

How do I run multiple instances of Swaggerize on the same host?

所以我正在尝试为 Node 应用程序构建一个简单的 PaaS (http://www.github.com/darrensmith/baseplatform),但我遇到了一些非常奇怪的行为。

基本上 - 您可以 运行 主机上的 BasePlatform,它使用 http-proxy 在端口 8080 上启动代理服务器,并在端口 8180 上启动 Swaggerize-express 实例。最初它代理端口上的所有请求8080 到 8180,这是 API 安装新应用程序的地址。

您可以上传一个应用程序并指定一个域名,该域名的 DNS 指向同一主机(用于测试的本地主机),并根据该域将请求代理到 运行在备用端口上。

所以我创建了第二个 swaggerize-express 应用程序并将其上传到端口 8005 上的 BasePlatform 运行ning。但是当我尝试查看自动生成的 Swagger JSON(http://localhost:8005/api/v1/api-docs) 对于端口 8005 上的应用 运行ning 我在端口 8180 上得到默认应用 运行ning 的 JSON。

如果我独立启动应用程序并访问端口 8005,我会得到正确的 JSON。

我不明白主机一个端口上的节点进程 运行ning 如何干扰另一个端口上的节点进程 运行ning,我正在寻找一些见解。

注意 - 这是我试图直接在启动它的端口上点击已安装应用程序的 json。如果我尝试在端口 8080(通过代理)上查看它,我会得到相同的行为。 Swaggerize 未自动处理的我的静态路由按预期工作 - swaggerize 处理的路由之间似乎只有交叉。

如有任何帮助,我们将不胜感激!

想通了!

我在启动子进程时隐式地将当前工作目录保留为父进程 (BasePlatform) 的目录:

const fork = require('child_process').fork;
app.locals.settings.deployedProcesses[oldAppId+'-'+latestDeployId] = fork('./deployments/'+oldAppId+'-'+latestDeployId+'/server.js');

这样做时,子进程的 Swaggerize 路由器正在获取父进程的 swagger.yaml 文件(因为它卡在父进程的当前工作目录中)而不是它自己的文件。

我修改它以将当前工作目录设置为子进程的目录:

const fork = require('child_process').fork;
app.locals.settings.deployedProcesses[oldAppId+'-'+latestDeployId] = fork('server.js',[],{
    cwd: './deployments/'+oldAppId+'-'+latestDeployId
});