发布时间:2020-05-15编辑:佚名阅读(1436)
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'));
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选项用于在发送代理请求之前之前,使用Promise异步修改请求路径
app.use(proxy('httpbin.org', { forwardPathAsync: function() { return new Promise(function(resolve, reject) { // ... // eventually resolve( /* your resolved forwardPath as string */ ) }); } }));
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选项用于在将响应返回给客户端之前,对响应做处理
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)); } }));
与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选项强制实现
app.use('/proxy', proxy('www.google.com', { https: true }));
可以用preserveHostHdr选项将HTTP头部复制到express代理服务器的HTTP头部
app.use('/proxy', proxy('www.google.com', { preserveHostHdr: true }));
这是一个实验选项,用于在发送代理请求时,保证请求体(req.body)编码为Node Buffer
app.use('/proxy', proxy('www.google.com', { reqAsBuffer: true }));
request body默认编码格式为 utf-8。
当代理请求体为Buffer时,使用null来保存缓冲(例如,图像上传) ,接受 raw-body支持的任何值。
编码格式也可以通过intercept选项实现
app.use('/post', proxy('httpbin.org', { reqBodyEncoding: null }));
默认情况下。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人