nodejs代理没有响应
问题描述:
我有一个node.js应用程序提供静态文件(html,js,css)。在静态文件中,完成了一些ajax请求(在请求中使用/ TEST)。我需要将这些请求代理到在localhost上运行的另一台服务器:213445。静态页面显示正常,但,当涉及到代理的请求时,它永远挂...nodejs代理没有响应
我的代码是:
var express = require("express");
var httpProxy = require('http-proxy');
var fs = require('fs');
// Create https server
var app = express.createServer({
key: fs.readFileSync('privatekey.pem'),
cert: fs.readFileSync('certificate.pem')
});
// Handle static files
app.use(express.static(__dirname + '/public'));
// Proxy request
app.all('/TEST/*',function(req, res){
// Remove '/TEST' part from query string
req.url = '/' + req.url.split('/').slice(2).join('/');
// Create proxy
var proxy = new httpProxy.HttpProxy();
proxy.proxyRequest(req, res, {
host: 'localhost',
port: 21345,
enableXForwarded: false,
buffer: proxy.buffer(req)
});
});
// Run application
app.listen(10443);
答
我有同样的问题。如果你注释掉
你会看到代理工作。
不知道如何解决它,如果express.static使用
Marak大地主回应了错误report!
这是一个明确的问题。 Connect/Express中间件正在为您的响应对象做非标准的事情, 中断流。尝试使用原始
request
模块而不是http-proxy
。 如果您需要正确的中间件堆栈,检查出https://github.com/flatiron/union
答
由于对HTTP代理issue 180故障描述是与上面提到的连接完成的非标准化的东西:
使用NPM安装连接-restreamer使这个最后的项目在你的快递app.configuration:
app.use(require('connect-restreamer')());
然后做这样的事情:
var httpProxy = require('http-proxy');
var routingProxy = new httpProxy.RoutingProxy();
app.get('/proxy/', function (req, res) {
routingProxy.proxyRequest(req, res, {
target: {
host : host,
port : port
}
});
})
这会将整个URL(包括“/ proxy /”)传递到目标主机。你可以在rewrite/modify the headers of the req之前,如果你进入proxyRequest()
想要模仿来自特定CNAME虚拟主机或不同URL字符串的请求。
事实上,经过一段时间后,我决定采取相反的行动。如果请求了静态文件,Nginx将为它们提供服务。如果请求一些动态文件,那么Nginx将它们代理到我的node.js应用程序。我认为这是更多Nginx的工作来提供静态文件。 – Luc
现在有同样的问题并使用相同的解决方案。仍然讨厌使用静态代码破坏代理 –