前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Angular 中使用 Api 代理

Angular 中使用 Api 代理

作者头像
Jimmy_is_jimmy
发布2022-04-15 14:03:14
3770
发布2022-04-15 14:03:14
举报
文章被收录于专栏:call_me_Rcall_me_R

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第5天。

作为前端开发,我们跟后端对接接口是很频繁的事情,但是,我们对接的过程中总是遇到跨域的问题,那么我们如何解决呢?

本文使用 angualr 来讲解代理 api 对接的话题。

首先我们先来了解下,什么跨域。

跨域

简单理解:当一个请求的协议、域名(ip地址)、端口三部分任意一个当前页面的 url 不同就是跨域

以我的站点 https://jimmyarea.com 为例:

被请求的地址

是否跨域

原因

http://jimmyarea.com

协议不同

https://jimmyarea.cn

地址不同

https://127.0.0.1:9000

地址和端口号不同

代理

这个时候,我们可以通过代理,本地联调不同环境的 api 地址。

首先,我们在项目的根目录上新建一个文件 proxy.conf.json

我们以接口请求 https://jimmyarea.com/api/public/article?page=-1 为例子:

代码语言:javascript
复制
{
  "/api": {
    "target": "https://jimmyarea.com/",
    "changeOrigin": true,
    "secure": false,
    "pathRewrite": {
      "^/api": "/api"
    }
  }
}

target 是代理的地址,pathRewrite 是对代理的前缀的重写。

完成了代理文件之后,需要开启代理。我们在 package.json 中添加多一条命令行,表明是开发环境调试使用。

代码语言:javascript
复制
"script": {
  "dev": "ng serve --proxy-config=proxy.conf.json",
}

执行 npm run dev 启动项目并带上代理。每次代理文件更改,需要重新启动下该命令行~

验证

我们新建一个 article 的服务,其中 article.service.ts 文件内容如下:

代码语言:javascript
复制
import { Injectable } from '@angular/core';
// http 客户端
import { HttpClient } from '@angular/common/http'

@Injectable({
  providedIn: 'root'
})

export class ArticleService {

  constructor(
    private http: HttpClient
  ) { }
   
  // 获取文章列表
  getArticleList() {
    return this.http.get('/api/public/article', {
      // 返回类型
      responseType: 'json',
      // 请求的参数
      params: {
        page: -1
      }
    })
  }

}

上面的请求,在页面上地址是 http://localhost:4200/api/public/article?page=-1,其实访问的是地址 https://jimmyarea.com/api/public/article?page=-1。我们可以在 user-list.component.ts 中调用验证一下:

代码语言:javascript
复制
ngOnInit():void {
  this.articleService.getArticleList().subscribe({
    next: (data: any) => {
      console.log(data)
    },
    error: () => {}
  })
  // ...
}

程序跑起来后,你可以在控制台上看到下面的网络请求:

代理请求get例子.png
代理请求get例子.png

Good Job, Bro. 我们能够完美代理后端所给的地址,进行调试了,并且代理可不止代理一个地址哦。读者可以编写多个代理地址验证一下~

【完】✅

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022/04/05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 跨域
  • 代理
  • 验证
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档