美文网首页
express-http-proxy代理设置

express-http-proxy代理设置

作者: 我的天气很好啦 | 来源:发表于2019-08-12 19:12 被阅读0次
    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参数的两种状态
    • 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属性

    有时候通过一个接口请求过大的内容时,可能会返回一个庞大无比的错误给我们,所以这里给我们的response加一个大小的限制。

    app.use('/proxy', proxy('www.google.com' , {
      limit: '5mb'
    }))
    
    5.host的true和false两种情况

    host的默认情况是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.在发送response前对response进行一些操作

    you can modify the proxy's response 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)
      }
    }))
    
    • 利用promise异步操作
    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)
      })
      }
    }))
    

    相关文章

      网友评论

          本文标题:express-http-proxy代理设置

          本文链接:https://www.haomeiwen.com/subject/uuchlctx.html