如何通过向另一个Web应用程序发出请求来从express.js提供一些URL?

时间:2011-08-19 14:20:33

标签: node.js express

我已经使用express.js编写了一些代码,我想将它放在与使用其他技术(在本例中为Django)实现的Web应用程序相同的HTTP端口上。我不想将用户浏览器重定向到另一个端口,因为如果我这样做,他们可能会将URL与另一个端口标记在一起,然后我就失去了以后重新配置安排的能力。所以,我希望express.js在其端口上提供HTTP服务,通过向另一个端口上提供的辅助Web应用程序发出HTTP请求来实现我指定的一些路径。

express.js是否有任何中间件或其他技术可以通过向其他服务器发出HTTP请求来为某些路径提供服务?

The stackoverflow question How to make web service calls in Expressjs?是相关的,但只讨论GET,我会有一些POST请求转发。)

2 个答案:

答案 0 :(得分:2)

虽然可以使用节点发出POST请求,但我认为您描述的模式更适合在node.js和django之前使用nginxapache之类的服务器,并根据请求将请求代理到任何适当的端口。

通常,django和node.js都会侦听您希望它们侦听的端口,而nginx则侦听端口80.然后在nginx中定义一个虚拟主机,将某些请求转发给node.js,并将某些请求转发给django的。

Here是使用proxy_pass的nginx文档。

这是一个例子,从nginx Full Example修改:

  server { # simple reverse-proxy
    listen       80;
    server_name  domain2.com www.domain2.com;

    # serve static files
    location ~ ^/(images|javascript|js|css|flash|media|static)/  {
      root    /var/www/virtual/big.server.com/htdocs;
    }

    # pass requests for dynamic content to django
    location /djangostuff {
      proxy_pass      http://127.0.0.1:8080;
    }

    # pass requests for node
    location /nodestuff {
      proxy_pass      http://127.0.0.1:8081;
    }

  }

答案 1 :(得分:1)

使用node-http-proxy,只需拨打一次app.use即可对所有未处理的请求进行反向代理,如下所示:

var app = express.createServer();
# my app.get bindings
app.use(require('http-proxy').createServer(80, 'other-server-address'));
app.listen(80);