如何在同一个端口上运行express和geddy应用程序?

时间:2013-12-03 03:37:02

标签: node.js heroku express geddy

使用geddy框架实现了一个现有的node.js应用程序,它由Heroku的工头启动,如下所示:

web: geddy

我正致力于将其变成Heroku插件。 Heroku有一种方法可以自动生成附加组件所需的框架代码,但它是使用express实现的。它由以下命令启动:

web: node web.js

在内部,Heroku仅为每个应用分配1个端口(将外部流量路由到它)。有没有办法在同一个端口上启动现有的geddy应用程序和附加快递应用程序?或者是否有某种类型的应用程序级路由器可以根据传入的请求路径转发到geddy或express?

1 个答案:

答案 0 :(得分: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);

使用node启动所有三个脚本,测试结果如下:

cloud@wishlist:~$ curl localhost:8000/foo
I am the first server!
cloud@wishlist:~$ curl localhost:8000/bar
I am the second server!

这正是您所需要的:使两个应用程序看起来像是在同一个端口上侦听的东西。有关更多详细信息,请查看node http-proxy module