express-http-proxy使用方法

发布时间:2020-05-15编辑:佚名阅读(1234)

express-http-proxy是一个express代理中间件,其用法如下:

安装

npm install express-http-proxy

用法

proxy(host, options);

例如,将路由为'/proxy'的请求转发至‘www.google.com’:则可用下列语句实现

var proxy = require('express-http-proxy'); 
var app = require('express')(); 
app.use('/proxy', proxy('www.google.com'));

Options

forwardPath

forwardPath选项用于在代理请求之前修改路径

var proxy = require('express-http-proxy'); 
var app = require('express')(); 
app.use('/proxy', proxy('www.google.com', {
  forwardPath: function(req, res) {
    return require('url').parse(req.url).path;
  }
}));

forwardPathAsync

forwardPathAsync选项用于在发送代理请求之前之前,使用Promise异步修改请求路径

app.use(proxy('httpbin.org', {
  forwardPathAsync: function() {
    return new Promise(function(resolve, reject) {
      // ... 
      // eventually 
      resolve( /* your resolved forwardPath as string */ )
    });
  }
}));

filter

filter选项主要用于筛选哪些请求可以被代理转发,例如,你只想转发get请求

app.use('/proxy', proxy('www.google.com', {
  filter: function(req, res) {
     return req.method == 'GET';
  },
  forwardPath: function(req, res) {
    return require('url').parse(req.url).path;
  }
}));

intercept

intercept选项用于在将响应返回给客户端之前,对响应做处理

app.use('/proxy', proxy('www.google.com', {
  intercept: function(rsp, data, req, res, callback) {
    // rsp - original response from the target 
    data = JSON.parse(data.toString('utf8'));
    callback(null, JSON.stringify(data));
  }
}));

decorateRequest

与intercept相反,decorateRequest选项用于在请求通过代理转发至目标主机之前,对请求进行处理

app.use('/proxy', proxy('www.google.com', {
  decorateRequest: function(proxyReq, originalReq) {
    // you can update headers 
    proxyReq.headers['Content-Type'] = 'text/html';
    // you can change the method 
    proxyReq.method = 'GET';
    // you can munge the bodyContent. 
    proxyReq.bodyContent = proxyReq.bodyContent.replace(/losing/, 'winning!');
    return proxyReq;
  }
}));

https

通常代理请求的协议类型与原始请求保持一致,如果代理请求需要用https协议,可以用https选项强制实现

app.use('/proxy', proxy('www.google.com', {
  https: true
}));

preserveHostHdr

可以用preserveHostHdr选项将HTTP头部复制到express代理服务器的HTTP头部

app.use('/proxy', proxy('www.google.com', {
  preserveHostHdr: true
}));

reqAsBuffer

这是一个实验选项,用于在发送代理请求时,保证请求体(req.body)编码为Node Buffer

app.use('/proxy', proxy('www.google.com', {
  reqAsBuffer: true
}));

reqBodyEncoding

request body默认编码格式为 utf-8。
当代理请求体为Buffer时,使用null来保存缓冲(例如,图像上传) ,接受 raw-body支持的任何值。
编码格式也可以通过intercept选项实现

app.use('/post', proxy('httpbin.org', {
  reqBodyEncoding: null
}));

timeout

默认情况下。node在连接过程中,是没有timeout的。使用timeout选项增加超时,Timed-out requests 将会返回504和X-Timeout-Reason header。

app.use('/', proxy('httpbin.org', {
  timeout: 2000  // in milliseconds, two seconds 
}));


  关键字:express-http-proxy使用方法


鼓掌

0

正能量

0

1

呵呵

0


评论区