概述

这是设置代理的神器,webpack的devServer.proxy就是使用了非常强大的 http-proxy-middleware 包。Node.js代理很简单。 轻松配置代理中间件进行连接,发布,浏览器同步等等。
代理 /api 向 http://www.example.org请求


var express = require('express');
var proxy = require('http-proxy-middleware'); var app = express(); app.use('/api', proxy({target: 'http://www.example.org', changeOrigin: true}));
app.listen(3000); // http://localhost:3000/api/foo/bar -> http://www.example.org/api/foo/bar

注意:需设置changeOrigin = ture

安装


$ npm install --save-dev http-proxy-middleware

核心概念


var proxy = require('http-proxy-middleware'); var apiProxy = proxy('/api', {target: 'http://www.example.org'});
// \____/ \_____________________________/
// | |
// context options // 'apiProxy' is now ready to be used as middleware in a server.

context: 定义哪些请求要被目标主机代理
options.target:目标主机 (协议+主机名)
也可以使用简写配置
proxy('http://www.example.org:8000/api');
等价于 proxy('/api', {target: 'http://www.example.org:8000'});

context匹配规则

提供另一种方法来决定应该代理哪些请求; 如果无法使用服务器的路径参数来设置代理,那么就需要更多的灵活性。

  • 匹配路径

proxy({...}) - 匹配所有路径,所有请求都被代理.
proxy('/', {...}) - 匹配所有路径,所有请求都被代理.
proxy('/api', {...}) - 匹配路径 /api

  • 多个路径匹配

proxy(['/api', '/ajax', '/someotherpath'], {...}) - context是个数组,匹配 /api, /ajax, /someotherpath 路径

  • 通配符路径匹配

注,一个星''只能匹配当前层级的任意字符,匹配任意的多级路径则需用两个:'*'
可以访问 micromatch 或者 glob 查看更多通配符的例子
proxy('**', {...}) 匹配所有路径,所有请求都被代理.
proxy('*/.html', {...}) 匹配所有以 .html 为结尾的路径
proxy('/*.html', {...}) 匹配以 .html 结尾的绝对路径
proxy('/api/*/.html', {...}) 匹配在 /api 路径下的,且以 .html 结尾的路径
proxy(['/api/', '/ajax/'], {...}) combine multiple patterns
proxy(['/api/', '!/bad.json'], {...}) exclusion

选项(options)

option.pathRewrite: 重写目标的url路径,key用正则表达式来匹配路径
注,路径太长时,可以用这个选项设置,方便后期调用接口


// 重写路径
pathRewrite: {'^/old/api' : '/new/api'} // 移除路径
pathRewrite: {'^/remove/api' : ''} // 添加基础路径
pathRewrite: {'^/' : '/basepath/'} // 路径自定义
pathRewrite: function (path, req) { return path.replace('/api', '/base/api') }

暂时用到这么多,更多选项查看https://github.com/chimurai/h...

来源:https://segmentfault.com/a/1190000016075134

http-proxy-middleware的更多相关文章

  1. Node.js Web 开发框架大全《中间件篇》

    这篇文章与大家分享优秀的 Node.js 中间件模块.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用程序,编写能够处 ...

  2. 实例PK(Vue服务端渲染 VS Vue浏览器端渲染)

    Vue 2.0 开始支持服务端渲染的功能,所以本文章也是基于vue 2.0以上版本.网上对于服务端渲染的资料还是比较少,最经典的莫过于Vue作者尤雨溪大神的 vue-hacker-news.本人在公司 ...

  3. Vue服务端渲染和Vue浏览器端渲染的性能对比

    Vue 2.0 开始支持服务端渲染的功能,所以本文章也是基于vue 2.0以上版本.网上对于服务端渲染的资料还是比较少,最经典的莫过于Vue作者尤雨溪大神的 vue-hacker-news.本人在公司 ...

  4. browser-sync + http-proxy-middleware 配置代理跨域

    写代理js文件下面是文件内容 /** * Module dependencies. */ var browserSync = require('browser-sync').create() var ...

  5. npm模块之http-proxy-middleware使用教程(译)

    单线程node.js代理中间件,用于连接,快速和浏览器同步 Node.js代理简单. 轻松配置代理中间件连接,快速,浏览器同步等. 由流行的Nodejitsu http代理提供. TL;DR 代理/ ...

  6. React第一篇: 搭建React + nodejs + express框架

    前提: 需要安装Node.js (>6)版本 1.cmd进到本地某个目录, 逐行输入以下指令(以下括号为注释) npm install -g create-react-app   (全局安装cr ...

  7. 7:django 中间件

    中间件 中间件是一个连接django请求/相应处理的框架,是一个轻量级的低层次的全局影响django输入输出的系统插件. 每一个中间件组件负责一些特定的功能,这里我们我们只看一下如何激活使用系统自带的 ...

  8. 爬虫、网页测试 及 java servlet 测试框架等介绍

    scrapy 抓取网页并存入 mongodb的完整示例: https://github.com/rmax/scrapy-redis https://github.com/geekan/scrapy-e ...

  9. Vue服务端渲染 VS Vue浏览器端渲染)

    Vue 2.0 开始支持服务端渲染的功能,所以本文章也是基于vue 2.0以上版本.网上对于服务端渲染的资料还是比较少,最经典的莫过于Vue作者尤雨溪大神的 vue-hacker-news.本人在公司 ...

  10. Express 框架以及与http-proxy-middleware整合实现代理

    1.Express的简单使用 1.简介 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具. 使用 Exp ...

随机推荐

  1. Let Us Adore 让我们来敬拜祂 中文歌词

      Verse 1 诸天宣告 神的荣耀 万国万民 都将赞美 宣扬祂奇妙 The heavens declare The glory of God And all of the world Will j ...

  2. 3828. 三角形计数 3829. ZCC loves Isaac 3830. 字符消除

    3828 给定n个点的坐标(0<=xi,yi<=10000)求选出任意三个点能组成的三角形的总面积. 题解 太naive了 枚举三角形的y最小的点,把剩余的点按角度排序 然后随便算,可以用 ...

  3. select 语句关键字优先级

    1.select 语句优先级 select classid, userid, name, age from study where userid > 15 group by classid ha ...

  4. vue学习-day04(路由)

    目录: 1.组件传值-父组件向子组件传值和data与props的区别    2.组件传值-子组件通过事件调用向父组件传值          3.案例:发表评论.使用ref获取DOM元素和组件引用   ...

  5. python实现的ocr接口

    太累了,,有时间再补解释 import pytesseract import requests from PIL import Image from PIL import ImageFilter fr ...

  6. x-pack邮件报警功能

    1):修改elasticsearch.yml xpack.notification.email.account: work:   profile: standard   email_defaults: ...

  7. HBase调优案例(一)——建表长时间等待最后失败

    现象: 1.在HBase Shell里执行建表操作会等很久,最终失败: 2.通过代码侧进行建表同样不能成功. 原因排查: 1.查询HMaster日志,发现有接收到建表(create)的RPC请求:   ...

  8. Controller控制台Vuser虚拟用户的运行状态

    Controller控制台Vuser运行的状态 Down:没有运行Pending:挂起Init:初始化Ready:准备就绪Run:正在运行Rendezvous:正在集结Passed:运行通过Faile ...

  9. oracle em启动问题

    这种情况出现的可能性是(1)主机IP地址改变,(2)主机名改变,(3)移植到全新的主机,(4)监听程序未启动,5)oracle服务也检查一下 关于orcl的启动: emctl start dbcons ...

  10. 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_1 Mybatis中编写dao实现类的使用方式-查询列表

    就是自己写实现类的方式来开发 直接finish 把之前写的CRUD的代码复制到过来. 在把之前pom.xml里面的包的依赖也复制过来 复制到当前的pom.xml内 允许自动导入 以上步骤就是复制了一个 ...