在现代 Web 应用中,我们经常需要设置代理来解决一些跨域访问的问题。本篇文章将详细讲解如何在 Express.js 中设置代理。
什么是代理?
HTTP 代理简单来说就是一个“跳板机”,客户端通过代理发送 HTTP 请求,再由代理转发请求到目标服务器,目标服务器将响应发送给代理,代理再将响应返回给客户端。因为代理位于客户端和服务端之间,所以可以在代理中进行一些额外的逻辑处理,比如修改请求头、响应头、缓存请求结果等。
为什么要设置代理?
在 Web 开发中,你可能会遇到以下几种情况需要设置代理:
- 跨域访问:浏览器有同源策略,不能在 JS 中直接访问不同域名的资源。而通过代理,可以让客户端请求代理服务器,再由代理服务器请求目标服务端,绕过同源策略,实现跨域访问。
- 转发请求:比如你的后台服务跑在另一台机器上,而前端服务跑在另一台机器上,你需要在前端服务中设置代理,把从前端发出的请求通过代理转发到后台服务上。
- 动态调整请求:比如代理可以在转发请求时,动态修改 header,body 或 query 参数,使得目标服务端能够识别并返回正确的结果。
如何设置代理?
接下来将详细讲解如何在 Express.js 中设置代理。我们将使用 http-proxy-middleware 实现代理功能。
- 安装依赖
npm install --save http-proxy-middleware
- 创建代理中间件
-- -------------------- ---- ------- -- - --------------------- -- ---------- ---- ----- - --------------------- - - --------------------------------- -- ------- ----- -------- - ----------------------- ------- ------------------------- -- ----------- ------------- ----- -- ------- ---- ------------------- ------ ------------ - ----------- --- -- ---- ------- ---------------- ---------- -- ---- -- ------- - -- ----------- ------- ------------------------ ------------- ---------------------- -- --- -------------- - ---------
target
:要代理的目标服务器地址。可以是字符串(表示目标服务器地址,比如http://localhost:8080
),也可以是一个对象(表示目标服务器的选项,比如{protocol: 'http', host: 'localhost', port: 8080}
)。changeOrigin
:是否改变请求的 host 头部,以便服务端识别为同域请求。默认为 false。pathRewrite
:重写要代理的路径。比如要代理路径为/server/api/user
,但是目标服务器上实际的路径是/api/user
,那么可以用{ '^/server': ''}
的规则进行重写。router
:设置特殊的代理路由规则。这个选项可以实现更细粒度的代理控制。键(如/api
)为路由规则,值(如http://localhost:3000
)为要代理的目标服务器地址。
- 使用代理中间件
-- -------------------- ---- ------- ----- ------- - ------------------- ----- -------- - ---------------------- ----- --- - ---------- -- ------- ------------------ ---------- -- ---- ---------------- -- -- - ------------------- -- ------- -- ------------------------ ---
总结
本篇文章介绍了 HTTP 代理的概念、需要设置代理的场景以及如何在 Express.js 中设置代理。实践证明,使用 http-proxy-middleware 可以非常方便地实现代理功能,并且能够支持比较复杂的代理场景。希望这篇文章对于需要进行代理设置的前端开发者有一定的帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64f59e3bf6b2d6eab3e674f3