Angular 配置api代理 proxy 实践

文章介绍了在Angular项目开发中如何设置代理配置,以解决跨域问题。提供了两种方法,一种是创建proxy.conf.json文件,另一种是创建proxy.conf.js文件。两种方法都能实现目标,但当需要处理多个目标地址和复杂匹配规则时,推荐使用proxy.conf.js。此外,文中提醒如果设置了baseUrl,需将其置空以防止代理失效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

话不多说,直奔主题

:: 解决方案

:: 方式一 ::
  • 第一步,在根目录或/src 下新建一个 proxy.conf.json 文件

    备注:这里不用纠结文件名称即xxx.xxx.json,只要使用时能找到,且正确配置文件内容格式即可

    {
      "/dev-list": {
        "target": "https://a.examples.com/dev",	// 代理地址
        "secure": true,	// 接口是否开启 https
        "changeOrigin": true	// 支持跨域
      },
      "/dev-info": {
        "target": "https://a.examples.com/dev",
        "secure": true,
        "changeOrigin": true
      },
      "/test-list": {
        "target": "http://b.examples.com/test",
        "secure": false,
        "changeOrigin": true,
        "logLevel": "debug"	// 代理日志
      },
      "/test-info": {
        "target": "http://b.examples.com/test",
        "secure": false,
        "changeOrigin": true,
        "logLevel": "debug"
      }
    }
    
  • 第二步,在 angular.json 文件中找到 architect 下的 serve ,并在 serve 内的 options 选项内配置 proxyConfig,没有就依次创建对应选项参数,事例如下:

    ...
    {
      "architect": {
        ...
        "serve": {
          ...
          "options": {
            ...
            // 当前配置文件所做目录,相对于`angular.json`文件的位置,具体以实际配置位置为准
            "proxyConfig": "src/proxy.conf.json"	
          }
        }
      }
    }
    ...
    
  • 第三步,重启项目,验证成果

    说明:这里的 npm run start 实际指向的也是 ng serve 启动方式,故不用配置 --proxy-config

    npm run start 
    ===OR===
    ng serve
    
:: 方式二 ::
  • 第一步,在根目录或/src 下新建一个 proxy.conf.js 文件

    备注:这里不用纠结文件名称即xxx.xxx.js,只要使用时能找到,且正确配置文件内容格式即可

    const PROXY_CONFIG = [
    	{
        context: [
          "/dev-list",
          "/dev-info"
        ],
        "target": "https://a.examples.com/dev",
        "secure": true,
        "changeOrigin": true
      },
      {
      	context: [
      		"/test-list",
          "/test-info"
    		],
        "target": "http://b.examples.com/test",
        "secure": false,
        "changeOrigin": true,
        "logLevel": "debug"
      }
    ]
    
    module.exports = PROXY_CONFIG
    
  • 第二步,在 angular.json 文件中找到 architect 下的 serve ,并在 serve 内的 options 选项内配置 proxyConfig,没有就依次创建对应选项参数,事例如下:

    ...
    {
      "architect": {
        ...
        "serve": {
          ...
          "options": {
            ...
            // 当前配置文件所做目录,相对于`angular.json`文件的位置,具体以实际配置位置为准
            "proxyConfig": "src/proxy.conf.js"	
          }
        }
      }
    }
    ...
    
  • 第三步,重启项目,验证成果

    说明:这里的 npm run start 实际指向的也是 ng serve 启动方式,故不用配置 --proxy-config

    npm run start 
    ===OR===
    ng serve
    

:: 重要

如果环境中设置了 baseUrl ,那么需要将其内容置空,不然代理可能会失效,参考事例如下:

export const environment = {
	production: false,
	// baseUrl: 'http://examples.com'
	baseUrl: ''
	...
}

:: 总结

相对来讲,两种方式都可实现,具体差别也不大,但若是需要配置多个面向 target 的代理地址,且同时需要多个匹配规则时,推荐使用 方式二 proxy.conf.js 的方式

:: 衍伸阅读

代理到后端服务器

:: 更多内容 ::

> 开发过程中踩坑经验记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值