我已经使用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请求转发。)
答案 0 :(得分:2)
虽然可以使用节点发出POST请求,但我认为您描述的模式更适合在node.js和django之前使用nginx
或apache
之类的服务器,并根据请求将请求代理到任何适当的端口。
通常,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);