angular前后端分离代理后端服务器
参考资料
背景
步骤
- 在项目的根目录下创建一个 proxy.conf.json 文件,紧挨着 package.json。
- 往这个新的代理配置文件中添加如下内容:
{ "/api": { "target": "http://localhost:9999", "secure": false } }
- 在 CLI 配置文件 angular.json 中为 serve 目标添加 proxyConfig 选项:
"architect": { "serve": { "builder": "@angular-devkit/build-angular:dev-server", "options": { "browserTarget": "your-application-name:build", "proxyConfig": "./proxy.conf.json" },
我的配置
- 要使用这个代理选项启动开发服务器,请运行 ng serve 命令
其它
重写 URL 路径
pathRewrite 代理配置项能让你在运行时重写 URL 路径。 比如,你可以在代理配置中指定如下的 pathRewrite 值,以移除路径末尾的 “api” 部分。
content_copy
"/api": { "target": "http://localhost:3000", "secure": false, "pathRewrite": { "^/api": "" } }}
如果你要访问的后端不在 localhost 上,还要设置 changeOrigin 选项。比如:
{ "/api": { "target": "http://npmjs.org", "secure": false, "pathRewrite": { "^/api": "" }, "changeOrigin": true }}
要想了解你的代理是否在如预期般工作,可以设置 logLevel 选项。比如:
{ "/api": { "target": "http://localhost:3000", "secure": false, "pathRewrite": { "^/api": "" }, "logLevel": "debug" }}
代理的有效日志级别是 info(默认值)、debug、warn、error 和 silent。
代理多个条目
通过用 JavaScript 定义此配置,你还可以把多个条目代理到同一个目标。
将代理配置文件设置为 proxy.conf.js(代替 proxy.conf.json),并指定如下例子中的配置文件。
const PROXY_CONFIG = [ { context: [ "/my", "/many", "/endpoints", "/i", "/need", "/to", "/proxy" ], target: "http://localhost:3000", secure: false }]
module.exports = PROXY_CONFIG;
在 CLI 配置文件 angular.json 中,指向 JavaScript 配置文件:
content_copy ... "architect": { "serve": { "builder": "@angular-devkit/build-angular:dev-server", "options": { "browserTarget": "your-application-name:build", "proxyConfig": "src/proxy.conf.js" },
绕过代理
如果你需要根据情况绕过此代理,或在发出请求前先动态修改一下,可以添加 bypass 选项,就像下例的 JavaScript 所示。
const PROXY_CONFIG = { "/api/proxy": { "target": "http://localhost:3000", "secure": false, "bypass": function (req, res, proxyOptions) { if (req.headers.accept.indexOf("html") !== -1) { console.log("Skipping proxy for browser request."); return "/index.html"; } req.headers["X-Custom-Header"] = "yes"; } } }
module.exports = PROXY_CONFIG;
npm install --save-dev https-proxy-agent
请在 JavaScript 配置文件中使用如下内容。
var HttpsProxyAgent = require(https-proxy-agent); var proxyConfig = [{ context: /api, target: http://your-remote-server.com:3000, secure: false }]; function setupForCorporateProxy(proxyConfig) { var proxyServer = process.env.http_proxy || process.env.HTTP_PROXY; if (proxyServer) { var agent = new HttpsProxyAgent(proxyServer); console.log(Using corporate proxy server: + proxyServer); proxyConfig.forEach(function(entry) { entry.agent = agent; }); } return proxyConfig; } module.exports = setupForCorporateProxy(proxyConfig);
下一篇:
C语言图书管理系统课设