0
点赞
收藏
分享

微信扫一扫

Angular 中使用 Api 代理

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

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

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

跨域

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

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

被请求的地址

是否跨域

原因


jimmyarea.com


协议不同

jimmyarea.cn


地址不同


https://127.0.0.1:9000


地址和端口号不同

代理

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

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

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

{
"/api": {
"target": "https://jimmyarea.com/",
"changeOrigin": true,
"secure": false,
"pathRewrite": {
"^/api": "/api"
}
}
}

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

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

"script": {
"dev": "ng serve --proxy-config=proxy.conf.json",
}

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

验证

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

import { Injectable } from '@angular/core';
// http 客户端
import { HttpClient } from '@angular/common/http'

@Injectable({
providedIn: 'root'
})

export class ArticleService {

constructor(private) { }

// 获取文章列表
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​​ 中调用验证一下:

ngOnInit():void {
this.articleService.getArticleList().subscribe({
next: (data: any) => {
console.log(data)
},
error: () => {}
})
// ...

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

Angular 中使用 Api 代理_json

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

【完】✅

举报

相关推荐

0 条评论