2013-12-03 2 views
1

Существует существующий Node.js приложение, реализованное с использованием Geddy рамки, она начинается с прорабом Heroku как так:Как запустить экспресс-и geddy-приложения на одном и том же порту?

web: geddy 

Я работаю на превращение его в Heroku надстройку. У Heroku есть способ автоматически генерировать скелетный код, необходимый для надстройки, но он реализован с использованием выражения. Он запускается с помощью этой команды:

web: node web.js 

Внутренне Heroku только выделяет 1 порт каждого приложения (который получает внешний трафик маршрутизируется к нему). Есть ли способ запустить как настоящее приложение geddy, так и добавленное экспресс-приложение на одном и том же порту? Или у вас есть какой-то тип маршрутизатора уровня приложения, который будет перенаправляться на geddy или выражать на основе входящего запроса?

ответ

1

Предполагая, что вы находитесь на Heroku и ограничены только приложениями Node.js, я предлагаю вам запустить новый узел в качестве обратного прокси. Быстрый и грязный пример будет следующим:

proxy.js

var http = require('http'), 
    httpProxy = require('http-proxy'); 
var options = { 
    pathnameOnly: true, 
    router: { 
    '/foo': '127.0.0.1:8001', 
    '/bar': '127.0.0.1:8002' 
    } 
}; 

var proxyServer = httpProxy.createServer(options); 
proxyServer.listen(8000); 

first.js

var http = require('http'); 

http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.end('I am the first server!\n'); 
}).listen(8001); 

second.js

var http = require('http'); 

http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.end('I am the second server!\n'); 
}).listen(8002); 

запуск всех трех сценариев с помощью узла , и результат испытания следующий:

[email protected]:~$ curl localhost:8000/foo 
I am the first server! 
[email protected]:~$ curl localhost:8000/bar 
I am the second server! 

Это именно то, что вам нужно: что-то похожее на то, что два приложения прослушивают один и тот же порт. Для более подробной информации смотрите node http-proxy module

Смежные вопросы