proxy-请求代理小记

前言:公司老项目与JAVA后端的接口请求地址是通过注入一个global.baseUrl的方式引用,当进行本地开发的时候需要开发人员手动修改baseUrl指向mock data的url。若想请求test环境的后端接口则需将baseUrl修改成test环境的url,会出现老生常谈的跨域问题!

思考

跨域问题的解决方式网上一查一大把,这边就不废话。仅做思路的记录

  • chrome方面介入,使用--disable-web-security在浏览器层禁用同源策略。优点:不需要改动代码,开箱即用。缺点:不知道该方法啥时候会挂,不能彻底解决开发中跨域的根本问题。
  • 开发环境下前端node层开启一个proxy代理服务,将请求的地址指向test环境的URL。
  • 后端处理,暂不考虑。

前期准备

添加代理用到了npm模块 http-proxy-middleware

$ npm install --save-dev http-proxy-middleware
复制代码

对可能用到的基本配置进行简单说明下,已添加注释

var express = require('express')
var proxy = require('http-proxy-middleware')

var options = {
  target: 'http://www.example.org', // 目标地址
  changeOrigin: true, // 是否修改origin为目标地址的origin
  pathRewrite: {
    '^/api/old-path': '/api/new-path', // 将请求的old-path 解析为new-path
  },
}

var exampleProxy = proxy(options)
 
var app = express()
app.use('/api', exampleProxy)
app.listen(3000)
复制代码

项目间的差异性

现在很多的脚手架内置的webpack中webpack-dev-server中有一个proxy属性,配置起来相当简单。

 // webpack-dev-server的配置
 devServer: {
 ...
 hot: true,
 port: 3000,
 host: '10.0.0.9',
 proxy: {
   '/test/*': {
       target: 'http://localhost',
       changeOrigin: true,
       secure: false
   }
 }

复制代码

在这个老项目中,采用的gulp+webpack的打包方式。当然现在的项目基本来说都是用webpack咯。

  • webpack 主要以entry文件为入口形成的依赖链,对依赖文件的类型,进行监听,loader任务,打包合并,专业处理打包各种规范模块。
  • gulp 主要以监听物理目录下文件,执行进行配置的任务流。

来看看build的目录结构

  • 很通用的webpack2的项目实践方式,将不同环境下的不同webpack配置分离出来,通过webpack.DefinePlugin注入当前环境变量的方式区分(dev/test/prod等)
  • gulp里面build.js里面完成了对静态文件的打包压缩生成/上传CDN等等操作,本次重点在于本地开发下dev.js。

express + http-proxy-middleware

扯了半天题外话,进入正题。 通过阅读dev.js代码发现是通过server()函数开启一个express用于本地开发,其实也就是同理于webpack-dev-server。 把上面准备工作中的实例代码结合自己的实际需求直接撸进去就行,伪代码如下

var proxy = require("http-proxy-middleware");

var proxyOpts = {
    target: config.proxy,
    changeOrigin: true
};

express().use("/", proxy(proxyOpts));
复制代码

为了区分proxyToTest还是toMock,安装一波minimist(解析命令行后面所携带的参数),多写个命令脚本吧

var minimist = require("minimist");
var options = minimist(process.argv.slice(2));
复制代码

当执行gulp dev --proxy时,options = { _: [ 'dev' ], proxy: true }

运行

npm run proxy
复制代码

[HPM] Proxy created: / -> http://demo.com

可看到"/"都被成功代理到http://demo.com下。完结撒花~

转载于:https://juejin.im/post/5c65217ff265da2dbc59745b

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值