1. 程式人生 > 程式設計 >如何在 Vue 中使用 Axios 非同步請求API

如何在 Vue 中使用 Axios 非同步請求API

設定基本 HTTP 請求

首先在終端中執行下面的命令把 Axios 安裝到專案中:

installaxiosnpminstallaxios

然後,在 vue 元件中像這樣匯入axios。

//App.vie-importingaxios
<script>
importaxiosfrom'axios'

exportdefault{
setup(){

}
}
</script>

接下來用 axios.get 通過 Kanye REST API 的 URL 獲取隨機語錄。之後可以用 Promise.then 等待請求返回響應。

//App.vue-sendingourHTTPrequest
<script>
importaxiosfrom'axios'

exportdefault{
setup(){
axios.get('https://api.kanye.rest/').then(response=>{
//handleresponse
&nhttp://www.cppcns.com
bsp;}) } } </script>

現在可以從 API 中獲取響應了,先看一下它的含義。把它儲存成名為 quote 的引用。

//App.vue-storingtheresponse
<script>
importaxiosfrom'axios'
import{ref}from'vue'

exportdefault{
setup(){
axios.get('https://api.kanye.rest/').then(response=>{
//handleresponse
quote.value=response
})
return{
quote
}
}
}
</script>

最後將其輸出到模板中並以斜體顯示,並用引號引起來,另外還需要給這條語錄加上引用來源。

//App.vue-templatecode
<template>
<div>
<i>"{{quote}}"</i>
<p>-KanyeWest</p>
</div>
</template>

檢查一下瀏覽器中的內容。

如何在 Vue 中使用 Axios 非同步請求API

我們可以看到隨機返回的侃爺語錄,還有一些額外的資訊,例如請求的響應碼等。

對於我們這個小應用,只對這個 data.quote 值感興趣,所以要在指令碼中指定要訪問 response 上的哪個屬性。

//App.vue-gettingonlyourquote
axios.get('https://api.kanye.rest/').then(response=>{
//handleresponse
quote.value=response.data.quote
})

通過上面的程式碼可以得到想要的內容:

如何在 Vue 中使用 Axios 非同步請求API

Axios 配合 async/await

可以在 Vue 程式中把 Axios 和 async /await 模式結合起來使用。

在設定過程中,首先註釋掉當前的 GET 程式碼,然後建立一個名為 loadQuote 的非同步方法。在內部,可以使用相同的 axios.get 方法,但是我們想用 async 等待它完成,然後把結果儲存在一個名為 response 的常量中。

然後設定 quote 的值。

//App.vue-asyncAxios
constloadQuote=async()=>{
constresponse=awaitKanyeAPI.getQuote()
quote.value=response.data.quote
}

它和前面的程式碼工作原理完全一樣,但這次用了非同步模式。

如何在 Vue 中使用 Axios 非同步請求API

Axios 的錯誤處理

在 async-await 模式中,可以通過 try 和 catch 來為 API 呼叫新增錯誤處理:

//Errorhandlingwithasync/await
try{
constresponse=awaitKanyeAPI.getQuote()
quote.value=response.data.quote
}catch(err){
&n程式設計客棧bsp;console.log(err)
}

如果使用原始的 promises 語法,可以在 API 呼叫之後新增 .catch 捕獲來自請求的任何錯誤。

//ErrorhandlingwithPromises
axios.get('https://api.kanye.rest/')
.then(response=>{
//handleresponse
quote.value=response.data.quote
}).catch(err=>{
console.log(err)
})

傳送POST請求

下面看一下怎樣傳送 POST 請求。在這裡我們使用 jsONPlaceholder Mock API 呼叫。

如何在 Vue 中使用 Axios 非同步請求API

他們的文件中提供了一個測試 POST 請求的 /posts 介面。

如何在 Vue 中使用 Axios 非同步請求API

接下來我們需要建立一個按鈕,當點選按鈕時將會觸發我們的API呼叫。在模板中建立一個名為 “Create Post” 的按鈕,單擊時呼叫名為 createPost 方法。

<div>
<i>"{{quote}}"</i>
<p>-KanyeWest</p>
<p>
<button@click="createPost">CreatePost</button>
</p>
</div>
</template>

下面在程式碼中建立 createPost 方法,然後從 setup 返回。

這個方法,類似於前面的 GET 請求,只需要呼叫 axios.post 並傳入URL(即https://jsonplaceholder.typicode.com/posts )就可以複製貼上文件中的資料了。

//App.vue
constcreatePost=()=>{
axios.post('https://jsonplaceholder.typicode.com/posts',JSON.stringify({
title:'foo',body:'bar',userId:1,})).then(response=>{
console.log(response)
})
}

單擊按鈕試一下,可以看到控制檯輸出了大量資訊,告訴我們 POST 請求已成功完成。

如何在 Vue 中使用 Axios 非同步請求API

用 Axios 編寫可複用的 API 呼叫

在專案中通過建立一個 src/services 目錄,用它來組織所有 api 呼叫。

目錄中包含 2 種類型的檔案:

  • API.js :用來建立一個帶有定義的 baseURL 的 Axios 例項,這個例項會用於所有的路由
  • *{specific functionality}*API.js :更具體的檔案,可用於將 api 呼叫組織成可重用的模組

這樣做的好處是可以方便的在開發和生產伺服器之間進行切換,只需修改一小段程式碼就行了。

建立 services/API.js 檔案,並將 Axios baseURL 設定為預設為 Kanye REST API。

API.jsimportaxiosfrom'axios'

exportdefault(url='https://api.kanye.rest')=>{
returnaxios.create({
baseURL:url,})
}

接下來建立一個 KanyeAPI.js 檔案並從 ./API 中匯入 API。在這裡我們要匯出不同的 API 呼叫。

呼叫 API() 會給得到一個 Axios 例項,可以在其中呼叫 .get 或 .post。

//KanyeAPI.js
importAPIfrom'./API'

exportdefault{
getQuote(){
returnAPI().get('/')
},}

然後在 App.vue 內部,讓我們的元件通過可複用的 API 呼叫來使用這個新檔案,而不是自己再去建立 Axios。

//App.vue
constloadQuote=程式設計客棧async()=>{
try{
constresponse=awaitKanyeAPI.getQuote()//<---THISLINE
quote.value=response.data.quote
}catch(err){
console.log(err)
}
}

下面把 createPost 移到其自己的可重用方法中。

回到 KanyeAPI.js 在匯出預設設定中新增 createPost,這會將 POST 請求的資料作為引數傳遞給我們的 HTTP 請求。

與GET請求類似,通過 API 獲取 axios 例項,但這次需要覆蓋預設 URL 值並傳遞 JSONplaceholder url。然後就可以像過去一樣屌用 Axios POST 了。

//KanyeAPI.js
exportdefault{
getQuote(){
returnAPI().get('/'程式設計客棧)
},createPost(data){
returnAPI('https://jsonplaceholder.typicode.com/').post('/posts',data)
}
}

如此簡單

回到 App.vue ,可以像這樣呼叫新的 post 方法。

//App.vue
constcreatePost=()=>{
constresponse=awaitKanyeAPI.createPost(JSON.stringify({
title:'foo',&nb程式設計客棧sp;body:'bar',}))

console.log(response)
}

現在單擊按鈕時,可以看到專用的 API 能夠正常工作。

把 API 呼叫移出這些 Vue 元件並放在它自己的檔案的好處在於,可以在整個程式中的任何位置使用這些 API 呼叫。這樣可以建立更多可重用和可伸縮的程式碼。

最終程式碼

//App.vue
<template>
<div>
<i>"{{quote}}"</i>
<p>-KanyeWest</p>
<p>
<button@click="createPost">CreatePost</button>
</p>
</div>
</template>

<script>
importaxiosfrom'axios'
import{ref}from'vue'
importKanyeAPIfrom'./services/KanyeAPI'
exportdefault{
setup(){

constquote=ref('')

constloadQuote=async()=>{
try{
constresponse=awaitKanyeAPI.getQuote()
quote.value=response.data.quote
}catch(err){
console.log(err)
}
}

loadQuote()

//axios.get('https://api.kanye.rest/')
//.then(response=>{
////handleresponse
//quote.value=response.data.quote
//}).catch(err=>{
//console.log(err)
//})

constcreatePost=()=>{
constresponse=awaitKanyeAPI.createPost(JSON.stringify({
title:'foo',}))

console.log(response)
//axios.post('https://jsonplaceholder.typicode.com/posts',JSON.stringify({
//title:'foo',//body:'bar',//userId:1,//})).then(response=>{
//console.log(response)
//})

}

return{
createPost,quote
}
}
}
</script>

<style>
#app{
font-family:Avenir,Helvetica,Arial,sans-serif;
-webkit-font-smoothing:antialiased;
-moz-osx-font-smoothing:grayscale;
text-align:center;
color:#2c3e50;
margin-top:60px;
}
</style>
//API.js
importaxiosfrom'axios'

exportdefault(url='https://api.kanye.rest')=>{
returnaxios.create({
baseURL:url,})
}
//KanyeAPI.js
importAPIfrom'./API'
exportdefault{
getQuote(){
returnAPI().get('/')
},data)
}
}

以上就是如何在 Vue 中用 Axios 非同步請求API的詳細內容,更多關於Vue 用 Axios 非同步請求API的資料請關注我們其它相關文章!