http-proxy 是一個有用的代理工具庫,適用於 HTTP 請求的代理和重定向。
建立代理伺服器的方法:
var httpProxy = require('http-proxy');
var proxy = httpProxy.createProxyServer(options);
options 為代理伺服器建立引數。
一些例子:建立代理伺服器,監聽在 8000 埠上,收到請求後,會轉發給 埠 9000 的伺服器上。
var http = require('http'),
httpProxy = require('http-proxy');
//
// Create your proxy server and set the target in the options.
//
httpProxy.createProxyServer({target:'http://localhost:9000'}).listen(8000); // See (†)
埠 9000 的伺服器,只是簡單地傳送一個請求代理成功的提示資訊。
//
// Create your target server
//
http.createServer(function (req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write('request successfully proxied!' + '\n' + JSON.stringify(req.headers, true, 2));
res.end();
}).listen(9000);
看個具體的例子。
我在一個 SAP UI5 應用的 manifest.json 檔案裡,定義了一個 dataSources,名叫 invoiceRemote,uri 為:
http://localhost:8082/https:/...
這樣,該 SAP UI5 應用,會傳送一個 url,到 localhost 8082 去請求後設資料。
因此,我需要有一個自己的伺服器,監聽在埠 8082 上:
var http = require('http'),
httpProxy = require('http-proxy');
//
// Create your proxy server and set the target in the options.
//
httpProxy.createProxyServer({target:'http://localhost:9000'}).listen(8082);
並且透過 target:'http://localhost:9000' 的伺服器建構函式引數,指定當監聽在埠 8082 的伺服器接收到 HTTP 請求後,自動轉發到監聽在 9000 埠的伺服器上。
在埠 9000 上監聽的伺服器,收到請求後只是簡單的傳送 request successfully proxied 的響應:
http.createServer(function (req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write('request successfully proxied!' + '\n' + JSON.stringify(req.headers, true, 2));
res.end();
}).listen(9000);
測試:在瀏覽器裡輸入如下 url:
http://localhost:8082/https:/...
該請求依次經歷了下列的處理邏輯:
- 請求被代理伺服器 8082 成功攔截;
- 請求被代理伺服器 8082 轉發到伺服器 9000;
- 請求在伺服器 9000 被處理,請求明細被序列化成 JSON 字串,作為輸出傳送給 HTTP 請求的響應結構。
更多Jerry的原創文章,盡在:"汪子熙":