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)
})
}
}))
网友评论