2、代理功能
- // 代理列表
- const proxyTable = {
- '/api': {
- target: 'http://127.0.0.1:8090/api',
- changeOrigin: true
- }
- }
- // 处理代理列表
- function processProxy(req, res) {
- const requestUrl = req.url
- const proxy = Object.keys(proxyTable)
- let not_found = true
- for (let index = 0; index < proxy.length; index++) {
- const k = proxy[index]
- const i = requestUrl.indexOf(k)
- if (i >= 0) {
- not_found = false
- const element = proxyTable[k]
- const newUrl = element.target + requestUrl.slice(i + k.length)
- if (requestUrl !== newUrl) {
- const u = url.parse(newUrl, true)
- const options = {
- hostname : u.hostname,
- port : u.port || 80,
- path : u.path,
- method : req.method,
- headers : req.headers,
- timeout : 6000
- }
- if(element.changeOrigin){
- options.headers['host'] = u.hostname + ':' + ( u.port || 80)
- }
- const request = http
- .request(options, response => {
- // cookie 处理
- if(element.changeOrigin && response.headers['set-cookie']){
- response.headers['set-cookie'] = getHeaderOverride(response.headers['set-cookie'])
- }
- res.writeHead(response.statusCode, response.headers)
- response.pipe(res)
- })
- .on('error', err => {
- res.statusCode = 503
- res.end()
- })
- req.pipe(request)
- }
- break
- }
- }
- return not_found
- }
- function getHeaderOverride(value){
- if (Array.isArray(value)) {
- for (var i = 0; i < value.length; i++ ) {
- value[i] = replaceDomain(value[i])
- }
- } else {
- value = replaceDomain(value)
- }
- return value
- }
- function replaceDomain(value) {
- return value.replace(/domain=[a-z.]*;/,'domain=.localhost;').replace(/secure/, '')
- }
3、完整版 (编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|