开篇
项目情况:
本项目前后端分离开发,前端测试需要搭建一个本地测试服务器,由于没有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配置代理
网友评论