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

时间:2016-03-20 08:40:33

标签: node.js express proxy swagger paas

所以我试图为Node应用(http://www.github.com/darrensmith/baseplatform)构建一个简单的PaaS,并且我得到了一些非常奇怪的行为。

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

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

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

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

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

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

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

想出来了!

启动子进程时,我隐式将当前工作目录保留为父进程(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
});