npm 包 nesto-http-proxy-middleware 使用教程

介绍

nesto-http-proxy-middleware 是一个基于 Node.js 的 HTTP 代理中间件,支持多种代理模式和用例。它是 http-proxy-middleware 的扩展,提供了更加丰富的功能和更易用的 API。

安装

在命令行中使用 npm 安装:

--- ------- --------------------------- ------

使用

下面是一些常见的使用场景。

单个代理

----- ------- - -------------------
----- - --------------------- - - ---------------------------------------

----- --- - ----------

--------------- ----------------------- ------- ------------------------ ----

---------------- -- -- -
  ------------------- -- --------- -- ---- -------
---

这个例子创建了一个 Express 应用,并把 /api 路径下的所有请求转发到 http://api.example.com。你可以通过访问 http://localhost:3000/api/some/path 来测试这个代理是否生效。

多个代理

----- ------- - -------------------
----- - --------------------- - - ---------------------------------------

----- --- - ----------

--------------- ----------------------- ------- ------------------------ ----
------------------ ----------------------- ------- ------------------------ ----

---------------- -- -- -
  ------------------- -- --------- -- ---- -------
---

这个例子创建了一个 Express 应用,并把 /api 路径下的请求转发到 http://api.example.com,把 /images 路径下的请求转发到 http://cdn.example.com

路径重写

----- ------- - -------------------
----- - --------------------- - - ---------------------------------------

----- --- - ----------

-- ------- -------- --- ----
----- -------- - ----------------------- ------- ----------------------------- ------------ - -------- -- - ---

--------------- ----------

---------------- -- -- -
  ------------------- -- --------- -- ---- -------
---

这个例子创建了一个 Express 应用,并把 /api 路径下的请求转发到 http://api.example.com/api,并把请求路径中的 /api/xxx 重写成 /xxx。比如,/api/users 会被重写成 /users

自定义请求头

----- ------- - -------------------
----- - --------------------- - - ---------------------------------------

----- --- - ----------

--------------- -----------------------
  ------- -------------------------
  -------- -
    ------------------ ----------------------
  --
----

---------------- -- -- -
  ------------------- -- --------- -- ---- -------
---

这个例子创建了一个 Express 应用,并把 /api 路径下的请求转发到 http://api.example.com,同时添加了一个自定义的请求头 X-Custom-Header: MyCustomHeaderValue

过滤器

----- ------- - -------------------
----- - --------------------- - - ---------------------------------------

----- --- - ----------

-- ------ -- ---------
----- -------- - ----------------------- ------- ------------------------- ----------- ---------- ---- ---- -- -
  -- ------- --- ------------ -
    ----------------------------------
    -------
  -
  ------------------------------- --------
----

--------------- ----------

---------------- -- -- -
  ------------------- -- --------- -- ---- -------
---

这个例子创建了一个 Express 应用,并把 /api 路径下的请求转发到 http://api.example.com,同时添加了一个过滤器函数 onProxyReq,只有来自 IP 地址为 127.0.0.1 的请求才会被转发。

深入理解

API

createProxyMiddleware(options: ProxyOptions): RequestHandler

创建一个 HTTP 代理中间件。

  • options:选项对象,支持以下属性:

    • target:要代理的主机地址。
    • changeOrigin:是否修改请求头的 Origin 字段。默认为 true
    • autoRewrite:是否自动重写 Location 响应头和 HTML 内容里的 URL。默认为 false
    • followRedirects:是否跟随重定向。默认为 false
    • protocolRewrite:是否重写请求 URL 中的协议。默认为 false
    • pathRewrite:URL 路径重写规则对象。支持正则表达式和字符串格式,参考下面的说明。默认为 {}
    • headers:自定义请求头对象。
    • onProxyReq:请求过滤器函数,参数为 proxyReq: IncomingMessage, req: IncomingMessage, res: ServerResponse
    • onProxyRes:响应过滤器函数,参数为 proxyRes: IncomingMessage, req: IncomingMessage, res: ServerResponse
    • onError:代理请求错误处理函数,参数为 err: Error, req: IncomingMessage, res: ServerResponse
  • 返回值:一个 Express 中间件函数,可以使用 app.use() 用于注册到应用中。

URL 路径重写规则对象

pathRewrite 选项可以接收一个对象作为 URL 路径重写规则,支持以下格式:

  • 字符串:直接替换掉路径中匹配到的部分。
  • 正则表达式:匹配多个部分,并使用 $1, $2, ... 作为替换值,可以引用正则表达式中的分组。
  • 函数:接收一个参数 path,返回修改后的路径。

示例:

-
  ------------ -----------      -- - -------- --- --------
  ------------- ------          -- ---- ----
  ------- ----------            -- - ---- ------- ---
  ------------ ------ -- -      -- -------- ---- -------
    ------ ---------------
  --
-

常见问题

为什么我的代理不起作用?

  • 确认你的目标主机是否可达。
  • 确认你的目标主机是否正确。
  • 确认代理路径是否正确。
  • 确认代理中间件是否正确注册到了应用中。
  • 查看代理的请求与响应是否遵循了预期的规则。

如何调试代理中间件?

可以在控制台中使用 debug 模块输出调试信息:

----- ----- - --------------------------------
----- - --------------------- - - ---------------------------------------

--------------- -----------------------
  ------- -------------------------
  ----------- ---------- ---- ---- -- -
    ------------ -------- -- ---- ----------- ---------
  --
  ----------- ---------- ---- ---- -- -
    ------------ --------- -- ---- -------------------- ------------------------
  --
----

在控制台中使用以下命令启用调试信息:

----------------- ---- ------

如何取消代理中间件?

使用 app.disable('etag') 可以取消应用对 ETag 的支持。同样地,你可以使用 app.disable('proxy') 取消应用对某个代理中间件的支持。

参考文献

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/600566c281e8991b448e31ed


猜你喜欢

  • npm 包 egg-wxauth 使用教程

    在 Web 开发中,我们经常会需要实现微信登录功能。然而,微信登录涉及到许多繁琐的流程和验证,这给开发者带来了挑战。为了解决这个问题,有些开发者会采用第三方登录平台的解决方案。

    3 年前
  • npm 包 multiple-lcs 的使用教程

    前言 随着互联网的不断发展,前端技术也不断地更新迭代,npm 包作为前端项目开发中最重要的组成部分之一,为前端开发者带来了很多便利。在这篇文章中,我们将讲解 npm 包 multiple-lcs 的使...

    3 年前
  • npm 包 360grab 使用教程

    在前端开发中,经常需要处理图片相关的问题,诸如图片的压缩、裁剪等。而本文将为大家介绍一个非常实用的图片处理工具:360grab。本文将详细介绍 npm 包 360grab 的使用方法,并且会提供一些示...

    3 年前
  • npm 包 animated-ui 使用教程

    介绍 animated-ui 是一款基于 CSS 和 JavaScript 的动画库,该库提供了各种复杂深度的动画效果。除了能实现基于官方的动画库无法实现的效果之外,animated-ui 还提供了更...

    3 年前
  • npm 包 doimg 使用教程

    前言 在前端开发过程中,我们经常需要对图片进行处理,例如图片压缩、裁剪、生成缩略图等操作。这些操作可以借助一些工具来完成,而 doimg 就是其中一款非常实用的工具。

    3 年前
  • npm包ngcarousel使用教程

    什么是ngcarousel? ngcarousel是一个基于Angular框架的图片轮播组件,帮助开发者快速实现通过鼠标点击和滑动手势切换图片的功能。 安装和引入 在你的项目根目录下打开终端,输入以下...

    3 年前
  • npm 包 ngx-mobx 使用教程

    介绍 MobX 是一个简单、可扩展的状态管理库,而 ngx-mobx 则是一个适用于 Angular 项目的 MobX 封装库,提供了一种更加方便和简单的方式来管理 Angular 应用程序的状态。

    3 年前
  • npm 包 re-resizable-rotate使用教程

    在前端开发中,我们经常需要使用一些可调整大小的组件来进行UI设计。re-resizable-rotate是一个十分强大的可拖拽和可旋转的组件,可以让UI设计更加简单和灵活。

    3 年前
  • npm 包 react-native-truetime 使用教程

    在 React Native 开发中,时间戳是一个很重要的数据类型。然而,JavaScript 中的时间戳是本地时间,而不是正确的世界标准时间。为了在 React Native 应用中准确地获得时间戳...

    3 年前
  • npm 包 cross-storage-ext 使用教程

    在现代 web 应用程序中,跨站点通信已成为一个常见的需求。在实现时,程序员通常会面临跨域和安全性限制,并且需要在不同的站点共享数据。对于这个问题,Cross域存储解决方案为 JavaScript 应...

    3 年前
  • npm 包 ax-js 使用教程

    概述 ax-js 是一个功能强大而又易于使用的 JavaScript 工具类库,它适用于各种前端开发项目。本文将向您介绍如何安装和使用 ax-js,并提供有深度的指导建议和示例代码。

    3 年前
  • npm 包 importpackagejson 使用教程

    简介 随着前端技术的不断发展,前端项目中所依赖的依赖包越来越多。npm 是前端最常用的包管理工具之一,而 importpackagejson 就是一个可以直接在项目中导入 package.json 文...

    3 年前
  • npm 包 parameter.js 使用教程

    在前端开发中,参数校验是必不可少的一项操作。如果我们能够减少手动检查和处理参数错误的时间和精力,就能更专注于业务逻辑和用户体验的开发。针对这个需求,我们可以使用 npm 包 parameter.js ...

    3 年前
  • npm 包 @wynk/react-native-swipe-cards 使用教程

    @wynk/react-native-swipe-cards 是一个基于 React Native 实现的轻量级轮播卡片组件库。该库可以通过简单的配置和定制来适应各种应用场景。

    3 年前
  • npm 包 mongoose-repository 使用教程

    前言 对于前端开发者来说,Node.js 和 MongoDB 都不是很陌生的技术。这两个技术的配合,可以让前端开发更加丰富。 本文将介绍一个 npm 包 mongoose-repository,这是一...

    3 年前
  • npm 包 `generator-seng` 使用教程

    generator-seng 是一个基础的前端开发生成器,旨在通过命令行帮助开发者快速构建基础的前端项目,并提供了丰富的模板和代码片段。 在本文中,我们将详细介绍如何使用 generator-seng...

    3 年前
  • npm 包 vantage-es6-contextified-repl 使用教程

    前言 vantage-es6-contextified-repl 是一个基于 vantage 实现的 ES6 语法环境的 REPL 工具,可以帮助前端开发者更方便地运行和调试 JavaScript 代...

    3 年前
  • npm 包 @boeleboom/open-color 使用教程

    1. 什么是 @boeleboom/open-color @boeleboom/open-color 是一种基于颜色的设计系统,它使用了开放式颜色库 Open Color,提供了一组现代、灵活的颜色,...

    3 年前
  • npm 包 editor-md 使用教程

    作为前端开发人员,我们经常需要编写技术博客、文档等内容。而在编写这些内容时,我们经常需要使用 markdown 语言来快速创建文本内容。为了能够更加方便地使用 markdown,我们可以使用一个名为 ...

    3 年前
  • npm 包 gitestpraveen 使用教程

    在前端开发中,我们经常需要使用一些依赖库来完成我们的任务,比如 jQuery、React 等。而 npm 就是一个包管理器,用来管理这些库。在 npm 中,有许多非常优秀的第三方库,比如 gitest...

    3 年前

相关推荐

    暂无文章