前端代理nproxy

一、场景/用途

前端代理的用途,相信大家都清楚。应用场景很多,如——

1. 将线上的静态资源文件(JS、CSS、图片)替换为本地相应的文件,来调试线上(代码都被压缩过)的问题;
2. 本地开发过程,当后端接口未就绪的情况下(也就是前端和后端同学并行开发),将AJAX接口映射于本地文件;
3. 将测试环境或者线上环境的AJAX接口的数据映射于本地,反过来说,也就是开启本地的服务,本地的服务拉取的数据来自测试环境或者线上环境的数据(因为此时测试环境或者线上环境的服务比较稳定,还有,主要此时,测试同学基本都是基于测试环境来注明bug,所以此时可以直接将测试环境的数据来模拟本地拉取的数据,而不是用于自己模拟一套本地数据)

上述三个场景比较普遍,需要做代理映射的方面基本在后端服务接口及静态资源(页面代理当然也是可以,只不过场景不多)。

二、工具介绍

直接上官网吧,https://github.com/goddyZhao/nproxy,在git上搜索nproxy,会出现不少五花八门的nproxy,可别用错。来自作者GoddyZhao,牛叉的不得了。

基于node的代理服务工具,具体原理,我也不知,暂时停留在应用的阶段,能好好把它应用到极致,也是一个收获。

从官网中,作者提到几款流行的代理工具。下面是这些流行代理工具的对比图:

当然,上面的列举中我个人并没有真正去用过除了fiddler和nproxy之外的代理,当然还有一个web服务器nginx同样可以当做前端代理工具来使用。

如作者所说,nproxy的优势主要在这三个方面——

A: 支持Mac、Linux以及windows
D: 支持多个文件合并一个文件的替换
E: 支持目录替换

大家可以根据它的优势,可以适当的去做本地及线上文件的映射关系(可以用流行构建工具如Grunt、Gulp、Webpack、Fis等),来最大化呈现代理工具nproxy的优势。

至于,nproxy的具体使用,在这儿不copy了。主要注意要对浏览器使用代理进行端口配置,个人推荐chrome来去做,安装个chrome的代理工具插件会更加方便(如ProxySwitchySharp)。

下面是代理文件配置的模板文件

module.exports = [

  // 1. replace single file with local one
  {
    pattern: ‘homepage.js‘,      // Match url you wanna replace
    responder:  "/home/goddyzhao/workspace/homepage.js"
  },

  // 2. replace single file with web file
  {
    pattern: ‘homepage.js‘,      // Match url you wanna replace
    responder:  "http://www.anotherwebsite.com/assets/js/homepage2.js"
  },

  // 3. replace combo file with src with absolute file path
  {
    pattern: ‘group/homepageTileFramework.*.js‘,
    responder: [
      ‘/home/goddyzhao/workspace/webapp/ui/homepage/js/a.js‘,
      ‘/home/goddyzhao/workspace/webapp/ui/homepage/js/b.js‘,
      ‘/home/goddyzhao/workspace/webapp/ui/homepage/js/c.js‘
    ]
  },

  // 4. replace combo file with src with relative file path and specified dir
  {
    pattern: ‘group/homepageTileFramework.*.js‘,
    responder: {
      dir: ‘/home/goddyzhao/workspace/webapp/ui/homepage/js‘,
      src: [
        ‘a.js‘,
        ‘b.js‘,
        ‘c.js‘
      ]
    }
  },

  // 5. Map server image directory to local image directory
  {
    pattern: ‘ui/homepage/img‘,  // must be a string
    responder: ‘/home/goddyzhao/image/‘ //must be a absolute directory path
  },

  // 6. Write responder with regular expression variables like $1, $2
  {
    pattern: /https?:\/\/[\w\.]*(?::\d+)?\/ui\/(.*)_dev\.(\w+)/,
    responder: ‘http://localhost/proxy/$1.$2‘
  },

  // 7. Map server image directory to local image directory with regular expression
  // This simple rule can replace multiple directories to corresponding locale ones
  // For Example,
  //   http://host:port/ui/a/img/... => /home/a/image/...
  //   http://host:port/ui/b/img/... => /home/b/image/...
  //   http://host:port/ui/c/img/... => /home/c/image/...
  //   ...
  {
    pattern: /ui\/(.*)\/img\//,
    responder: ‘/home/$1/image/‘
  }
];

三、使用体验

根据我们常碰到的场景,举几个例子——

单文件映射:

{
    pattern: ‘http://test-qian.genshuixue.com/asset/js/registerCard_68edda4ec0.js‘,
    responder: ‘/Users/bjhl/Desktop/workplace/qianqian-frontend/asset/js/registerCard.js‘ //must be a absolute directory path
}

要注意,要写本地文件的绝对路径。

映射目录:

{
    pattern: /asset\/js/,
    responder: ‘/Users/bjhl/Desktop/workplace/qianqian-frontend/output/asset/js/‘
}

这个的应用场景,加入我的本地构建一次项目代码(非压缩版本),如果测试环境的代码同样没有压缩,那么我就可以顺利使用本地目录映射了。如果测试环境的代码是压缩过(这里我简单讲一下使用md5的方式)的,通过正则来进行映射——

{
    pattern: /^http:\/\/test-qian.genshuixue.com\/asset\/js\/(.*)_\w{10}.js$/,
    responder: ‘/Users/bjhl/Desktop/workplace/qianqian-frontend/output/asset/js/$1.js‘
}

上面仅仅映射js文件,如果我想要同时样式asset目录项目的css文件,没有问题,如下配置——

{
    pattern: /^http:\/\/test-qian.genshuixue.com\/asset\/(.*)_\w{10}\.(js|css)$/,
    responder: ‘/Users/bjhl/Desktop/workplace/qianqian-frontend/asset/$1.$2‘
}

玩儿好正则表达式,怎么美妙的映射方式你都可以构建。

对于多文件的映射方式,对于简单的js文件拼接方式,还行,否则,就要考虑文件的顺序了。这里举个小例子:

{
    pattern: ‘http://test-tianyan.genshuixue.com/src/dep/base.js‘,
    responder: [
        ‘../js-common/dep/requirejs/require.min.js‘,
        ‘../js-common/dep/angular/angular-1.2.16.js‘,
        ‘../js-common/dep/angular-ui-router/release/angular-ui-router.js‘,
        ‘../js-common/dep/angular/ui-bootstrap-tpls-0.11.2.js‘
    ]
}

对nproxy的使用过程,下面截个图说明一下:

对于nproxy,启动一次就可以了。它会监控配置文件的实施变更。也就是上面的[WARN]。上面的[INFO]代表匹配成功的请求路径。[ERROR]代表网络异常或者匹配规则配置错误,需要重新配置匹配规则。

一般情况下,建议nproxy的配置文件(如nproxy-conf.js)放在项目工程同级目录下,没有其他好处,维护方便而已。

OK,对于nproxy的使用体验就写这么多。

跨平台前端代码调试神器,大家试试。

时间: 2024-10-12 18:01:04

前端代理nproxy的相关文章

【前端】npm前端代理和转发

npm前端代理和转发: 在后端服务开启的状态下,npm run build (生产环境)将前端打包成静态文件,和后端服务放在一起,即可直接调用,例如后端开启8888端口,在localhost:8888直接访问前端网页. 在后端服务开启的状态下,npm run sevre(开发环境)前端文件(js.html.vue等)仍在前端的域中,不被允许跨域交互(同源策略),如果要和后端数据交互,则需要中间端口进行代理和转发. fetch.js 文件中写好前端的URL let service = axios.

运用 node + express + http-proxy-middleware 实现前端代理跨域的 详细实例哦

一.你需要准备的知识储备 运用node的包管理工具npm 安装插件.中间件的基本知识: 2.express框架的一些基础知识,知道如何建立一个小的服务器:晓得如何快速的搭建一个express框架小应用: 3.还需要一些前端的基础小知识,html\css\js\jquery 4.最重要的一点就是知道怎么产生的跨域,要是不知道怎么产生的跨域,如何知道需要去破解它呢? 二.实例的代码分析 场景分析,我本地的域名为<http.localhost:8080>,我要请求的地址是<http.****.

nginx前端代理tomcat取真实客户端IP

使用Nginx作为反向代理时,Tomcat的日志记录的客户端IP就不在是真实的客户端IP,而是Nginx代理的IP.要解决这个问题可以在Nginx配置一个新的Header,用来存储$remote_add,然后再Tomcat获取记录这个值. 新增nginx配置. server { listen 80; server_name www.xxxxx.com; location / { proxy_pass http://IP:8080/; proxy_set_header X-Real-IP $rem

Tengine前端代理502,499处理

1.增大proxy_read_timeout; proxy_send_timeout的参数.

记一次全站代理切换

这是一个忧伤的故事,首先要从一次故障说起.... 事故 先简要介绍一下公司网站架构, 代理服务器分为一级代理和二级代理, 一级代理是腾讯云的负载均衡,抗压能力比较强,防范ddos能力比较强,重要业务入口放在一级代理之上,比如www,gameapi,game等,然后反向代理到我们自己服务器. 二级代理是我们机房的服务器,lvs+keepalived高可用的,主要有两个作用: 老的SNS业务入口,以及一些访问量少的业务都在二级代理上. 备用,如果一级代理故障,紧急切换到二级代理上,保障线上业务正常.

Amoeba是一个类似MySQL Proxy的分布式数据库中间代理层软件,是由陈思儒开发的一个开源的java项目

http://www.cnblogs.com/xiaocen/p/3736095.html amoeba实现mysql读写分离 application  shang  2年前 (2013-03-28)  4095浏览  0评论 说明:要实现mysql的主从读写分离,目前主要有以下几种方案:1.通过程序实现,网上很多现成的代码,比较复杂,如果添加从服务器要更改多台服务器的代码.2.通过mysql-proxy来实现,由于mysql-proxy的主从读写分离是通过lua脚本来实现,目前lua的脚本的开

通过nginx部署前端代码实现前后端分离

实现前后端分离,可以让前后端独立开发.独立部署.独立单测,双方通过JSON进行数据交互. 对于前端开发人员来说,不用每次调试都需要启动或配置Java/Tomcat运行环境:对于后端开发人员来说 ,也不用在需要往JSP页面注入数据. 通过nginx来部署前端代码,可以帮助前端实现以下基本需求: 1.请求转发,解决请求跨域的问题 server { listen       7777; location /{ root   /Users/xiaoyun/git/someproject/dist; }

HAProxy反向代理相关配置

何谓代理? 所谓的代理一般分为两种,即正向代理和反向代理.正向代理可以实现让不同的主机通过代理服务器使用同一个地址和Internet上的其他主机通信,通常在一个局域网内只有一个公网IP时都需要用到正向代理,而反向代理则实现的是将来自不同主机的请求发送给后端的其他服务器就行处理,而自己不负责具体如何去处理. HAProxy介绍 HAProxy是一款基于Linux平台且开源的反向代理实现软件,同时支持虚拟主机,可以提供高可用性.负载均衡以及基于TCP和HTTP应用的代理.HAProxy特别适用于负载

简单配置服务端代理Tengine

刚刚说完Apache,接下来写一下tengine(nginx).tengine是建立在nginx上的开源软件,添加了一大堆feature,并且你可以使用自定义的内存管理,不管是作为前端代理,还是前端缓存,效果都是萌萌哒的. nginx和tengine略有差异,请查看官方Wiki.Tengine. ## 根据自己情况选择用户 user nobody; ## 建议设置机器CPU核心数目 worker_processes 1; ## 之前配置机器的时候设置过的打开数目 worker_rlimit_no