[英]proxy node request to new port and act like reverse proxy
我需要创建一个代理从端口A到端口B的请求的应用程序。例如,如果用户在端口3000上连接,他将被路由(在引擎盖下)到端口3001,因此“原始”应用程序将在端口3001上运行但在客户端(浏览器)中,用户将输入端口3000.不重定向...
http://example.com:3000/foo/bar
将创建一个侦听端口3001的新服务器,所有呼叫实际上都是使用新服务器和新端口运行的端口3000。 由于端口3000实际被占用,我的反向代理应用程序? 我该怎么测试呢......
有没有办法测试这个以验证这是否有效,例如通过单元测试?
我发现这个模块https://github.com/nodejitsu/node-http-proxy可能会有所帮助。
直接来自node-http-proxy
文档 ,这很简单。 您可以通过向端口3000发出HTTP请求来测试它 - 如果您获得与端口3001相同的响应,则它正在工作:
var http = require('http'),
httpProxy = require('http-proxy');
//
// Create a proxy server with custom application logic
//
var proxy = httpProxy.createProxyServer({});
var server = http.createServer(function(req, res) {
// You can define here your custom logic to handle the request
// and then proxy the request.
proxy.web(req, res, {
// Your real Node app
target: 'http://127.0.0.1:3001'
});
});
console.log("proxy listening on port 3000")
server.listen(3000);
我强烈建议你使用像mocha这样的东西为你的项目编写一套集成测试 - 通过这种方式,你可以直接针对你的服务器和你的代理运行测试。 如果测试通过两者,那么您可以放心,您的代理行为符合预期。
使用mocha和should.js的单元测试看起来像这样:
var should = require('should');
describe('server', function() {
it('should respond', function(done) {
// ^ optional synchronous callback
request.get({
url: "http://locahost:3000"
// ^ Port of your proxy
}, function(e, r, body) {
if (e)
throw new Error(e);
body.result.should.equal("It works!");
done(); // call the optional synchronous callback
});
});
});
然后,您只需运行测试(一旦安装了Mocha):
$ mocha path/to/your/test.js
您可以通过将以下内容添加到代理请求来验证这是否有效(如Remus答案中所述)
proxy.on('proxyReq', function (proxyReq, req, res, options) {
res.setHeader('App-Proxy', 'proxy');
});
通过这种方式,您可以验证您的“原始”调用是否对新服务器代理有效,甚至提供创建UT的能力,此外您还可以使用changeOrigin:true
属性...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.