express-http-proxy代理設定

2968 ワード

1.据え付け
npm install express-http-proxy --save
2.文法を使う
proxy(host, options);
使用例:
var proxy   = require('express-http-proxy')
var app      = require('express')()

app.use('/proxy', proxy('www.google.com'))
3.proxyのHOSTパラメータの2つの状態
  • using a static string
  • app.use('/', proxy('http://www.google.com'))
    
  • also be a function
  • function selectProxyHost() {
      return (new Date() % 2) ? 'http://www.google.com'  : 'http://altavista.com'
    }
    
    app.use('/', proxy(selectProxyHost))
    
    4.limit属性
    インターフェースを通してあまりにも大きい内容を要求すると、大きなエラーが返ってきますので、ここで私たちのレスリングにサイズ制限を加えます.
    app.use('/proxy', proxy('www.google.com' , {
      limit: '5mb'
    }))
    
    5.hostのtrueとfalseの2つの状況
    ホストのデフォルトはtrueです.
  • trueの場合は、最初に合致した要求結果のみを返すことが要求されます.
  • falseの場合は、要求は、毎回合致する要求結果を返します.例:
  • function coinToss() {
      return Math.random() > .5
    }
    function getHost() {
      return coinToss() ? 'http://www.google.com' : 'http://www.yahoo.com'
    }
    app.use(proxy(getHost, {
      memoizeHost: false
    }))
    
    6.請求前に要求情報をどのように修正するか
  • asnyc operations
  • app.use(proxy('localhost:12345', {
        proxyReqPathResolver: function (req) {
          var parts = req.url.split('?');
          var queryString = parts[1];
          var updatedPath = parts[0].replace(/test/, 'tent');
          return updatedPath + (queryString ? '?' + queryString : '');
        }
      }));
    
  • promise form
  • app.use('/proxy', proxy('localhost:12345', {
      proxyReqPathResolver: function(req) {
        return new Promise(function (resolve, reject) {
          setTimeout(function () {   // simulate async
            var parts = req.url.split('?');
            var queryString = parts[1];
            var updatedPath = parts[0].replace(/test/, 'tent');
            var resolvedPathValue = updatedPath + (queryString ? '?' + queryString : '');
            resolve(resolvedPathValue);
          }, 200);
        });
      }
    }));
    
    7.レスポンスを送信する前にレスポンスをいくつか操作します.
    you can modify the proxy's reponse before sending to the clientには二つの方法があります.
  • 直接操作
  • app.use('/proxy', proxy('www.google.com', {
      userResDecorator: function(proxyRes, proxyResData, userReq, userRes) {
        data = JSON.parse(proxyResData.toString('utf-8'))
        data.newProperty = 'exciting data'
        return JSON.stringify(data)
      }
    }))
    
  • プロミスで非同期操作
  • app.use('/proxy', proxy('www.google.com', {
      userResDecorator: function(proxyRes, proxyResData) {
      return new Promise(function(resolve) {
        proxyResData.funkyMessage = 'oi io oo ii';
        setTimeout(function() {
          resolve(proxyResData)
        }, 2000)
      })
      }
    }))