使用express做proxy测试代理服务器

2018-10-19  本文已影响108人  小杺

开篇

项目情况:

本项目前后端分离开发,前端测试需要搭建一个本地测试服务器,由于没有mock数据服务,所以项目中前端开发一直使用部署服务器的测试接口,测试接口的调用需要用本人itcode和password登陆部署服务器才能调用。

nginx本地代理服务器

这是之前使用的本地测试服务器的方式,使用nginx来做代理,转发请求,带上cookie,但是由于nginx配置复杂,操作繁琐,启动速度缓慢,系统迁移成本过高等原因,且本地测试不需要大并发请求,所以被本人摈弃使用。

nodejs http模块编写代理服务器

简单附上一段原理性代码:

const http = require('http');

const opt = {
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
        'Cookie': 'SESSION=f32d0c6c-4a9c-40d1-9b34-8cb863acd79c'
    }
};

http.get('http://wx.10085.cn/choprt/base/user/loginUser?_=1539921220226', opt, function (res) {
    console.log(res.statusCode);
    let result = '';
    
    res.on('data', function (data) {
        result = result + data;
    });
    res.on('end', function () {
        console.log(result);
    })
});

由于,http模块封装度过低,搭建开发成本过大,不能适应以后工程调整快速响应,所以暂时不考虑。

express + http-proxy-middleware

源码如下:

const express = require('express');
const path = require('path');
const proxy = require('http-proxy-middleware');
    
const app = express();
    
app.use(express.static(path.join(__dirname, 'rt-manage')));
    
    //proxy middleware settings
    const proxyTable = {
        '/choprt': {
            target: 'http://wx.10085.cn',
            changeOrigin: true,
            onProxyReq: function (proxyReq, req, res) {
                // proxyReq.setHeader('host', 'wx.10085.cn');
                console.log(req.path);
                console.log(res.statusCode);
                proxyReq.setHeader('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36');
                proxyReq.setHeader('Content-Type', 'application/x-www-form-urlencoded');
                proxyReq.setHeader('Cookie', 'SESSION=f32d0c6c-4a9c-40d1-9b34-8cb863acd79c');
            },
            onProxyRes: function (proxyRes, req, res) {
    
            }
        }
    };
    Object.keys(proxyTable).forEach(function (keys) {
        console.log(keys);
        app.use(keys, proxy(proxyTable[keys]));
    });
    //proxy middleware settings end
    
    app.listen(3000, function () {
        console.log('server is going');
    });

这种模式开发效率较快,还存在一个问题,就是session有失效时间,失效后需要自己登陆重新获取,所以比较麻烦,还有待改进。


参考文献:

http-proxy-middleware
Node.Js http模块(一)-发送http请求实例
node + express 搭建代理服务器(附源码)
npm模块之http-proxy-middleware使用教程(译)
express配置代理

上一篇下一篇

猜你喜欢

热点阅读