Tôi đang gọi dịch vụ web bằng cách sử dụng tìm nạp nhưng tôi cũng có thể làm như vậy với sự trợ giúp của các axios. Vì vậy, bây giờ tôi bối rối. Tôi nên đi cho một trong hai axios hoặc tìm nạp?
Tôi đang gọi dịch vụ web bằng cách sử dụng tìm nạp nhưng tôi cũng có thể làm như vậy với sự trợ giúp của các axios. Vì vậy, bây giờ tôi bối rối. Tôi nên đi cho một trong hai axios hoặc tìm nạp?
Câu trả lời:
Fetch và Axios có chức năng rất giống nhau, nhưng để tương thích ngược hơn, Axios dường như hoạt động tốt hơn (ví dụ như tìm nạp không hoạt động trong IE 11, hãy kiểm tra bài đăng này )
Ngoài ra, nếu bạn làm việc với các yêu cầu JSON, sau đây là một số khác biệt mà tôi tình cờ gặp phải.
Lấy yêu cầu bài viết JSON
let url = 'https://someurl.com';
let options = {
method: 'POST',
mode: 'cors',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json;charset=UTF-8'
},
body: JSON.stringify({
property_one: value_one,
property_two: value_two
})
};
let response = await fetch(url, options);
let responseOK = response && response.ok;
if (responseOK) {
let data = await response.json();
// do something with data
}
Yêu cầu bài viết của Axios JSON
let url = 'https://someurl.com';
let options = {
method: 'POST',
url: url,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json;charset=UTF-8'
},
data: {
property_one: value_one,
property_two: value_two
}
};
let response = await axios(options);
let responseOK = response && response.status === 200 && response.statusText === 'OK';
if (responseOK) {
let data = await response.data;
// do something with data
}
Vì thế:
Hi vọng điêu nay co ich.
Axios request is ok when status is 200 and statusText is 'OK'
Còn các httpStatus khác trong phạm vi 2xx như 201 hoặc 204 thì sao?
Chúng là các thư viện yêu cầu HTTP ...
Tôi kết thúc với cùng một nghi ngờ nhưng bảng trong bài này làm cho tôi đi với isomorphic-fetch
. Đó là fetch
nhưng hoạt động với NodeJS.
http://andrewhfarmer.com/ajax-lologists/
Liên kết ở trên đã chết Bảng tương tự ở đây: https : //www.javascript ware.com/ajax-lologists/
fetch
như Native ( Có nghĩa là bạn chỉ có thể sử dụng nó - không cần phải bao gồm thư viện , phù hợp với nguồn bảng), trong khi trên thực tế fetch
là không được thực hiện ở một số nền tảng (đặc biệt là trong tất cả các phiên bản của IE), mà bạn cần phải cung cấp một polyfill bên ngoài nào.
timeout
(rất kỳ lạ), chúng ta phải sử dụng một mô-đun riêng để thực hiện chức năng cơ bản này.
Theo mzabriskie trên GitHub :
Nhìn chung chúng rất giống nhau. Một số lợi ích của axios:
Transformers: cho phép thực hiện các biến đổi trên dữ liệu trước khi yêu cầu được thực hiện hoặc sau khi nhận được phản hồi
Đánh chặn: cho phép bạn thay đổi hoàn toàn yêu cầu hoặc phản hồi (cả tiêu đề). đồng thời, thực hiện các hoạt động không đồng bộ trước khi yêu cầu được thực hiện hoặc trước khi Promise giải quyết
Built-in XSRF bảo vệ
vui lòng kiểm tra Axios hỗ trợ trình duyệt
Tôi nghĩ bạn nên sử dụng axios.
Thêm một sự khác biệt lớn giữa API tìm nạp & API axios
Axios là gói bên thứ 3 độc lập có thể dễ dàng cài đặt vào dự án React bằng NPM.
Tùy chọn khác mà bạn đề cập là chức năng tìm nạp. Không giống như Axios, fetch()
được tích hợp vào hầu hết các trình duyệt hiện đại. Với tìm nạp, bạn không cần phải cài đặt gói bên thứ ba.
Vì vậy, tùy thuộc vào bạn, bạn có thể đi cùng fetch()
và có khả năng gây rối nếu bạn không biết những gì bạn đang làm HOẶC chỉ sử dụng Axios, điều này đơn giản hơn theo quan điểm của tôi.
Ngoài ra ... Tôi đã chơi xung quanh với nhiều lib khác nhau trong thử nghiệm của mình và nhận thấy cách xử lý khác nhau của các yêu cầu 4xx. Trong trường hợp này, thử nghiệm của tôi trả về một đối tượng json với phản hồi 400. Đây là cách 3 lib phổ biến xử lý phản hồi:
// request-promise-native
const body = request({ url: url, json: true })
const res = await t.throws(body);
console.log(res.error)
// node-fetch
const body = await fetch(url)
console.log(await body.json())
// Axios
const body = axios.get(url)
const res = await t.throws(body);
console.log(res.response.data)
Quan tâm là điều đó request-promise-native
và axios
đưa ra phản hồi 4xx trong khi node-fetch
không. Cũng fetch
sử dụng một lời hứa cho phân tích json.
.throws
phương pháp để kiểm tra lỗi ném. Trong trường hợp này, tôi đã thử nghiệm các từ chối từ al 3 libs và nhận thấy sự khác biệt trong dữ liệu được trả về.
Lợi ích của axios: