Как запустить несколько экземпляров Swaggerize на одном хосте?

Итак, я пытаюсь создать простой PaaS для приложений Node (http://www.github.com/darrensmith/baseplatform), и у меня действительно странное поведение.

По сути, вы можете запустить BasePlatform на своем хосте, и он запустит прокси-сервер на порту 8080, используя http-proxy и экземпляр Swaggerize-express на порту 8180. Первоначально он проксирует все запросы на порт 8080 через порт 8180, который является API для установить новые приложения.

Вы можете загрузить приложение и указать доменное имя, DNS которого указывает на тот же хост (localhost для целей тестирования), и на основе этого домена оно будет передавать запросы через прокси к приложению, работающему на альтернативном порту.

Поэтому я создал второе приложение swaggerize-express и загрузил его на BasePlatform, работающую на порту 8005. Однако, когда я пытаюсь просмотреть Swagger JSON, который создается автоматически (http://localhost:8005/api/v1/api-docs) для приложения, работающего на порту 8005, я получаю JSON для приложения по умолчанию, работающего на порту 8180. .

Если я запущу приложение самостоятельно и нажму на порт 8005, я получу правильный JSON.

Я не понимаю, как процесс узла, работающий на одном порту моего хоста, мешает процессу узла, работающему на другом, и ищу некоторую информацию.

Примечание. Это я пытаюсь подключить json установленного приложения непосредственно к порту, на котором оно было запущено. Если я попытаюсь просмотреть его на порту 8080 (через прокси), я получу то же самое. Мои статические маршруты, которые автоматически не обрабатываются Swaggerize, работают должным образом - кажется, что между маршрутами, обработанными swaggerize, есть только пересечение.

Любая помощь будет принята с благодарностью!


person Darren Smith    schedule 20.03.2016    source источник


Ответы (1)


Догадаться!

Я неявно оставил текущий рабочий каталог как каталог родительского процесса (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
});
person Darren Smith    schedule 20.03.2016