美文网首页
express-http-proxy使用

express-http-proxy使用

作者: 雨季雨线 | 来源:发表于2021-01-07 15:42 被阅读0次

    官方文档

    使用说明

    proxy(host, options);
    

    host 参数选项

    const proxy = require('express-http-proxy')
    
    proxy('http://google.com')
    
    or
    
    function selectProxyHost() {
      return (new Date() % 2) ? 'http://google.com' : 'http://altavista.com';
    }
     
    proxy(selectProxyHost)
    

    options参数选项

    const httpProxy = require('express-http-proxy')
    const app = express();
    
    const userServiceProxy = httpProxy('http://google.com', {
      //过滤器,指定类型的转发(可选)
      filter: function (req, res) {
        return req.method == 'GET';
      },
      //请求路径解析,转换一下路径(可选)
      proxyReqPathResolver: function (req) {
        var parts = req.url.split('?');
        var queryString = parts[1];
        var updatedPath = parts[0].replace(/test/, 'tent');
        return updatedPath + (queryString ? '?' + queryString : '');
      },
      //处理响应(可选)
      userResDecorator: function (proxyRes, proxyResData, userReq, userRes) {
        data = JSON.parse(proxyResData.toString('utf8'));
        data.newProperty = 'exciting data';
        return JSON.stringify(data);
      },
      //处理请求(可选)
      proxyReqOptDecorator: function (proxyReqOpts, srcReq) {
        // you can update headers
        // proxyReqOpts.headers['Content-Type'] = 'text/html';
        // you can change the method
        // proxyReqOpts.method = 'GET';
        return proxyReqOpts;
      },
      //处理请求body(可选)
      proxyReqBodyDecorator: function (bodyContent, srcReq) {
        console.log(bodyContent);
        return bodyContent;
      },
      //处理请求头(可选)
      userResHeaderDecorator(headers, userReq, userRes, proxyReq, proxyRes) {
        // recieves an Object of headers, returns an Object of headers.
        return headers;
      },
      //自定义错误(可选)
      proxyErrorHandler: function (err, res, next) {
        next(err);
      }
    })
      
    认证、限速等一系列中间件
    app.use((req, res, next) => {
      next()
    })
    
    // 代理请求
    app.get('/test/*', (req, res, next) => {
      userServiceProxy(req, res, next)
    })
    
    `http://localhost:3000/test/*` 代理到 `http://google.com/tent/*`上
    

    相关文章

      网友评论

          本文标题:express-http-proxy使用

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