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

阅读时长 9 分钟读完

介绍

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

纠错
反馈