使用 http-proxy 實現 SAP UI5 請求的代理重定向

注销發表於2022-02-16

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:/...

該請求依次經歷了下列的處理邏輯:

  1. 請求被代理伺服器 8082 成功攔截;
  2. 請求被代理伺服器 8082 轉發到伺服器 9000;
  3. 請求在伺服器 9000 被處理,請求明細被序列化成 JSON 字串,作為輸出傳送給 HTTP 請求的響應結構。

更多Jerry的原創文章,盡在:"汪子熙":

相關文章