1.解决跨域问题:
解决办法:使用node-mitmproxy模块进行代理
// proxy.js文件
//引入模块
const mitmproxy = require('node-mitmproxy');
//定义需要代理的域名
const hosts = ['****.com.cn', '****.com.cn', '****.cn'];
//定义需要排除的接口
const ignorePathes = ['/wx', '/zwapi'];
//创建代理
mitmproxy.createProxy({
sslConnectInterceptor: function(req, cltSocket, head) {
return false;
},
//拦截客户端发起的请求
requestInterceptor: function(rOptions, req, res, ssl, next) {
//参数说明:
//requestOptions:客户端请求参数
//clientReq: 客户端请求,
//clientRes: 客户端响应,
//ssl: 该请求是否为https
//next: 回调函数,执行完拦截逻辑后调用该方法
console.log(rOptions.hostname, rOptions.port, rOptions.path);
//判断拦截的请求域名是否是需要代理的域名 如果有则把域名和端口改为本地
if ( hosts.indexOf(rOptions.hostname) > -1 &&
!ignorePathes.some(p => rOptions.path.startsWith(p))
) {
rOptions.hostname = 'localhost';
rOptions.port = 8080;
}
next();
},
//拦截服务端请求/响应
responseInterceptor(req, res, proxyReq, proxyRes, ssl, next) {
console.log(req.url, proxyRes.statusCode);
next();
},
});
使用方式:
在package.json 的scripts中添加 startproxy
依赖模块中加入node-mitmproxy
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"start": "npm run dev",
"build": "node build/build.js",
"startproxy": "node build/proxy.js"
},
"devDependencies": {
"node-mitmproxy": "^3.1.0"
}
npm run startproxy
代理开启后 默认开启的端口是 6789
在浏览器端设置代理:本地6789端口 让浏览器发起的请求都经过proxy.js文件处理,
如果发起的请求满足拦截条件则改为访问本地文件
注意:配置完成后可能会出现Invalid Host header错误
解决办法 在webpack.dev.config.js 的 devServer中添加
disableHostCheck: true,
//todo proxyTable
//在build/config/index.js中添加
dev:{
proxyTable: {
"/wx": {
target: "http://bdcgzh.cafewallet.com.cn",
changeOrigin: true
},
"/zwapi": {
target: "http://bdcgzh.cafewallet.com.cn",
changeOrigin: true
}
},
}
网友评论