Sebagai pengembang front-end, kami sering berinteraksi dengan back-end. Namun, kami selalu menemui masalah lintas domain selama proses docking, lalu bagaimana cara mengatasinya?
Artikel ini menggunakan angualr
untuk menjelaskan topik docking agen api
. [Tutorial terkait yang direkomendasikan: "Tutorial Sudut"]
Pertama, mari kita pahami apa itu lintas domain.
Pemahaman sederhana tentanglintas-domain
: Ketika url
任意一个
tiga bagian协议、域名(ip地址)、端口
permintaan dan halaman saat ini berbeda, itu adalah lintas-domain .
Ambil situs saya https://jimmyarea.com
sebagai contoh:
Apakah | alamat yang diminta | lintas domain? |
---|---|---|
jimmyarea.com | memiliki | protokol yang berbeda |
. | jimmyarea.cn | memiliki |
alamat | yang | berbeda alamat dan nomor port | .
Proxy
Saat ini, kita dapat menggunakan proxy untuk bersama-sama men-debug alamat api
dari lingkungan yang berbeda.
Pertama, kita membuat file baru proxy.conf.json
di direktori root proyek.
Kami mengambil permintaan antarmuka https://jimmyarea.com/api/public/article?page=-1
sebagai contoh:
{ "/ api": { "target": "https://jimmyarea.com/", "changeOrigin": benar, "aman": salah, "jalurTulis Ulang": { "^/api": "/api" } } }
target
adalah alamat agen, pathRewrite
adalah penulisan ulang awalan agen.
Setelah menyelesaikan file proxy, Anda perlu mengaktifkan proxy tersebut. Kami menambahkan satu baris perintah lagi ke package.json
, yang menunjukkan bahwa baris tersebut digunakan untuk debugging di lingkungan pengembangan.
"skrip": { "dev": "ng layani --proxy-config=proxy.conf.json", }
Jalankan npm run dev
untuk memulai proyek dan menghadirkan agen. Setiap kali file proxy berubah, Anda perlu me-restart baris perintah
untuk memverifikasi bahwa
kami telah membuat layanan article
baru. Isi file article.service.ts
adalah sebagai berikut:
import { Injectable } from '@angular/core' ; // klien http mengimpor { HttpClient } dari '@angular/common/http' @Dapat disuntik({ disediakan di: 'root' }) kelas ekspor Layanan Artikel { konstruktor( http pribadi: HttpClient ) {} // Dapatkan daftar artikel getArticleList() { kembalikan ini.http.get('/api/public/article', { //Jenis pengembalian tipe respons: 'json', //Permintaan parameter parameter: { halaman: -1 } }) } }
Untuk request di atas, alamat pada halaman tersebut adalah http:// https://jimmyarea.com/api/public/article?page=-1
http://localhost:4200/api/public/article?page=-1
. https://jimmyarea.com/api/public/article?page=-1
. Kita dapat memverifikasinya dengan memanggilnya di user-list.component.ts
:
ngOnInit():void { this.articleService.getArticleList().subscribe({ selanjutnya: (data: apa saja) => { konsol.log(data) }, kesalahan: () => {} }) // ... }
Setelah program dijalankan, Anda dapat melihat permintaan jaringan berikut di konsol:
Good Job Gan, kita bisa dengan sempurna mem-proxy alamat yang diberikan oleh backend dan melakukan debug, dan proxy tersebut bisa mem-proxy lebih dari satu alamat. Pembaca dapat menulis beberapa alamat proxy untuk memverifikasi~
[Akhir]