回顾下跨域解决方案http-proxy-middleware

我们在React(或Vue)项目本地开发过程中很容易由前端自己解决跨域问题,这里面就用到的是插件http-proxy-middleware,它并不是webpack独享的插件,而是一个通用插件,它对http-proxy进行了一层封装,更加方便我们使用。

之前刚接触webpack的时候写过一个webpack反向代理proxyTable设置

前几天有个测试同事找我解决她的跑的本地项目测试公司项目时,出现跨域的情况,因为前端项目不是spa项目,没有webpack之类的,所以就准备参照http-proxy-middleware来实现。

我们看看http-proxy-middleware的源码,目前它的最新版本是2.0.6,貌似2.x版本和1.x版本导出的方法有所不同

先看看npm官网的示例介绍

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

所以核心createProxyMiddleware方法,我们继续看

// node_modules/http-proxy-middleware/dist/index.jsconst http_proxy_middleware_1 = require("./http-proxy-middleware");function createProxyMiddleware(context, options) { const { middleware } = new http_proxy_middleware_1.HttpProxyMiddleware(context, options); return middleware;}exports.createProxyMiddleware = createProxyMiddleware;

继续看这个middleware是怎么实现的。

// node_modules/http-proxy-middleware/dist/http-proxy-middleware.jsconst httpProxy = require("http-proxy");class HttpProxyMiddleware { constructor(context, opts) { this.logger = (0, logger_1.getInstance)(); this.wsInternalSubscribed = false; this.serverOnCloseSubscribed = false; // https://github.com/Microsoft/TypeScript/wiki/'this'-in-TypeScript#red-flags-for-this this.middleware = async (req, res, next) => { var _a, _b; if (this.shouldProxy(this.config.context, req)) { try { const activeProxyOptions = await this.prepareProxyRequest(req); this.proxy.web(req, res, activeProxyOptions); } catch (err) { next(err); } } else { next(); } }) this.proxy = httpProxy.createProxyServer({}); ...}exports.HttpProxyMiddleware = HttpProxyMiddleware;

终于找到核心实现middleware了,满足this.shouldProxy的就会利用this.proxy.web进行代理了,所以我们如果熟悉http-proxy的配置的,我们可以直接跳过http-proxy-middleware来使用http-proxy,但是好像也没这个必要吧。。。

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
(0)
用户投稿
上一篇 2022年6月28日
下一篇 2022年6月28日

相关推荐

  • 要想混的好,要经常请人吃饭

    要想混的好,要经常请人吃饭 你要想混的好,就要经常请人吃饭,看上去有点荒唐,其实不然,多数人与人的感情都是吃饭吃出来的,一般每一周或者十天请那些混的好的人吃饭,特别是有技术的人,能…

    2022年5月6日
  • 我国最大超深凝析气田项目在塔里木盆地开工

    光明日报乌鲁木齐7月25日电(记者李慧)7月25日,一项油气田建设领域的引领性项目在塔里木盆地开工,这项名为“塔里木油田博孜—大北超深气区100亿立方米产能建设工程”的项目,是我国…

    2022年8月4日
  • 安全容不下丝毫侥幸

    7月22日,一个名为“步步惊心”的高空游乐项目在不同景区接连发生两起安全事故,造成一死一伤,再次引发人们对景区游乐项目安全问题的高度关注。 近年来,主打“惊险”“刺激”的游乐项目,…

    2022年8月8日
  • 养猪大户转道光伏领域,正邦科技的400亿跨界投资遭监管关注

    在宣布进军新能源光伏领域后,6月20日早间,深陷资金链危机的养猪大户正邦科技(002157.SZ)收到了深交所的关注函,公司被要求说明本次投资资金的来源以及未来发展规划是否匹配。 …

    2022年6月22日
  • (新华视界)第二届京张体育文化旅游带发展论坛在北京举行

    当日,第二届京张体育文化旅游带发展论坛在北京举行。本届论坛以“把握后冬奥 共创新未来”为主题,分为建设成果发布和解读、合作签约、项目路演等环节,邀请政府主管部门、行业专家和企业代表…

    2022年8月12日
  • 腾讯出资“新基石研究员项目”

    IT之家 7 月 5 日消息,腾讯今天宣布,“新基石研究员项目”开始申报了,时间为 2022 年 7 月 1 日起至 9 月 30 日。这是在中国科学技术协会的指导下,由科学家主导…

    2022年7月7日
  • 最亮的恒星可以将小型气体系外行星“脱衣”成石核

    科学家们发现了海王星大小的系外行星 HD 56414 b,它围绕着一颗明亮的 A 型恒星运行,天狼星和织女星都属于该恒星。HD 56414 b 是已知围绕此类炽热恒星运行的最小行星…

    2022年8月17日
  • 35岁抗老分享,我坚持了10年的年轻小技巧

    1、我从去年年初就开始用射频美容仪了,这东西用几次确实没效果,但如果使用时间以年为单位那是不可能没效果的,时间长了铁杵还能成针不是?买之前可以多做功课,选效果好而且方便用的就行,我…

    2022年8月22日
  • 管理订单状态,该上状态机吗?

    前言 在平常的后端项目开发中,状态机模式的使用其实没有大家想象中那么常见,笔者之前由于不在电商领域工作,很少在业务代码中用状态机来管理各种状态,一般都是手动get/set状态值。去…

    2022年7月1日
  • 288个Python 机器学习项目合集

    以下288个python机器学习项目,来自网站thecleverprogrammer点com,在此网站搜下面的英文名,就能找到对应的机器学习项目,对于初学者是非常好的参考资料。 初…

    2022年7月2日

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息