美文网首页
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