美文网首页
使用express做proxy测试代理服务器

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

作者: 小杺 | 来源:发表于2018-10-19 17:47 被阅读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配置代理

    相关文章

      网友评论

          本文标题:使用express做proxy测试代理服务器

          本文链接:https://www.haomeiwen.com/subject/amluzftx.html