Vue2 配置 Axios api 接口調(diào)用文件的方法
前情回顧
在上一篇中,我們通過(guò)配置基本的信息,已經(jīng)讓我們的項(xiàng)目能夠正常的跑起來(lái)了。但是,這里還沒(méi)有涉及到 AJAX 請(qǐng)求接口的內(nèi)容。
vue 本身是不支持 ajax 接口請(qǐng)求的,所以我們需要安裝一個(gè)接口請(qǐng)求的 npm 包,來(lái)使我們的項(xiàng)目擁有這個(gè)功能。
這其實(shí)是一個(gè)重要的 unix 思想,就是一個(gè)工具只做好一件事情,你需要額外的功能的時(shí)候,則需要安裝對(duì)應(yīng)的軟件來(lái)執(zhí)行。如果你以前是一個(gè) jquery 重度用戶(hù),那么可能理解這個(gè)思想一定要深入的理解。
支持 ajax 的工具有很多。一開(kāi)始,我使用的是 superagent 這個(gè)工具。但是我發(fā)現(xiàn)近一年來(lái),絕大多數(shù)的教程都是使用的 axios 這個(gè)接口請(qǐng)求工具。其實(shí),這本來(lái)是沒(méi)有什么差別的。但是為了防止你們?cè)诳戳宋业牟┪暮推渌奈恼轮?,產(chǎn)生理念上的沖突。因此,我也就改用 axios 這個(gè)工具了。
本身, axios 這個(gè)工具已經(jīng)做了很好的優(yōu)化和封裝。但是,在使用的時(shí)候,還是略顯繁瑣,因此,我重新封裝了一下。當(dāng)然,更重要的是,封裝 axios 這個(gè)工具是為了和我以前寫(xiě)的代碼的兼容。不過(guò)我封裝得很好,也推薦大家使用。
封裝 axios 工具,編輯 src/api/index.js 文件
首先,我們要使用 axios 工具,就必須先安裝 axios 工具。執(zhí)行下面的命令進(jìn)行安裝
npm install axios -D

這里使用 cnpm 替代
這樣,我們就安裝好了 axios 工具了。
還記得我們?cè)诘谌┪闹姓淼南到y(tǒng)結(jié)構(gòu)嗎?我們新建了一個(gè) src/api/index.js 這個(gè)空文本文件,就那么放在那里了。這里,我們給它填寫(xiě)上內(nèi)容。
// 配置API接口地址
var root = 'https://cnodejs.org/api/v1'
// 引用axios
var axios = require('axios')
// 自定義判斷元素類(lèi)型JS
function toType (obj) {
return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase()
}
// 參數(shù)過(guò)濾函數(shù)
function filterNull (o) {
for (var key in o) {
if (o[key] === null) {
delete o[key]
}
if (toType(o[key]) === 'string') {
o[key] = o[key].trim()
} else if (toType(o[key]) === 'object') {
o[key] = filterNull(o[key])
} else if (toType(o[key]) === 'array') {
o[key] = filterNull(o[key])
}
}
return o
}
/*
接口處理函數(shù)
這個(gè)函數(shù)每個(gè)項(xiàng)目都是不一樣的,我現(xiàn)在調(diào)整的是適用于
https://cnodejs.org/api/v1 的接口,如果是其他接口
需要根據(jù)接口的參數(shù)進(jìn)行調(diào)整。參考說(shuō)明文檔地址:
https://cnodejs.org/topic/5378720ed6e2d16149fa16bd
主要是,不同的接口的成功標(biāo)識(shí)和失敗提示是不一致的。
另外,不同的項(xiàng)目的處理方法也是不一致的,這里出錯(cuò)就是簡(jiǎn)單的alert
*/
function apiAxios (method, url, params, success, failure) {
if (params) {
params = filterNull(params)
}
axios({
method: method,
url: url,
data: method === 'POST' || method === 'PUT' ? params : null,
params: method === 'GET' || method === 'DELETE' ? params : null,
baseURL: root,
withCredentials: false
})
.then(function (res) {
if (res.data.success === true) {
if (success) {
success(res.data)
}
} else {
if (failure) {
failure(res.data)
} else {
window.alert('error: ' + JSON.stringify(res.data))
}
}
})
.catch(function (err) {
let res = err.response
if (err) {
window.alert('api error, HTTP CODE: ' + res.status)
}
})
}
// 返回在vue模板中的調(diào)用接口
export default {
get: function (url, params, success, failure) {
return apiAxios('GET', url, params, success, failure)
},
post: function (url, params, success, failure) {
return apiAxios('POST', url, params, success, failure)
},
put: function (url, params, success, failure) {
return apiAxios('PUT', url, params, success, failure)
},
delete: function (url, params, success, failure) {
return apiAxios('DELETE', url, params, success, failure)
}
}
好,我們寫(xiě)好這個(gè)文件之后,保存。
2017年10月20日補(bǔ)充,刪除了評(píng)論中有人反映會(huì)出錯(cuò)的 return ,確實(shí)這個(gè) return 是沒(méi)有什么作用的。不過(guò)我這邊確實(shí)沒(méi)出錯(cuò)。沒(méi)關(guān)系啦,本來(lái)就沒(méi)啥用,只是一個(gè)以前的不好的習(xí)慣代碼。
有關(guān) axios 的更多內(nèi)容,請(qǐng)參考官方 github: https://github.com/mzabriskie/axios ,中文資料自行百度。
但就是這樣,我們還不能再 vue 模板文件中使用這個(gè)工具,還需要調(diào)整一下 main.js 文件。
調(diào)整 main.js 綁定 api/index.js 文件
這次呢,我們沒(méi)有上來(lái)就調(diào)整 main.js 文件,因?yàn)樵嘉募团渲玫帽容^好,我就沒(méi)有刻意的想要調(diào)整它。
原始文件如下:
import Vue from 'vue'
import App from './App'
import router from './router'
Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
template: '<App/>',
components: { App }
})
我們插入以下代碼:
// 引用API文件
import api from './api/index.js'
// 將API方法綁定到全局
Vue.prototype.$api = api
也就是講代碼調(diào)整為:
import Vue from 'vue'
import App from './App'
import router from './router'
// 引用API文件
import api from './api/index.js'
// 將API方法綁定到全局
Vue.prototype.$api = api
Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
template: '<App/>',
components: { App }
})
好了,這樣,我們就可以在項(xiàng)目中使用我們封裝的 api 接口調(diào)用文件了。
測(cè)試一下看看能不能調(diào)通
我們來(lái)修改一下 src/page/index.vue 文件,將代碼調(diào)整為以下代碼:
<template>
<div>index page</div>
</template>
<script>
export default {
created () {
this.$api.get('topics', null, r => {
console.log(r)
})
}
}
</script>好,這里是調(diào)用 cnodejs.org 的 topics 列表接口,并且將結(jié)果打印出來(lái)。
我們?cè)跒g覽器中打開(kāi)控制臺(tái),看看 console 下面有沒(méi)有輸出入下圖一樣的內(nèi)容。如果有的話,就說(shuō)明我們的接口配置已經(jīng)成功了。

cnodejs.org 接口數(shù)據(jù)演示
好,如果你操作正確,代碼沒(méi)有格式錯(cuò)誤的話,那么現(xiàn)在應(yīng)該得到的結(jié)果是和我一樣的。如果出錯(cuò)或者怎么樣,請(qǐng)仔細(xì)的檢查代碼,看看有沒(méi)有什么問(wèn)題。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue開(kāi)發(fā)中關(guān)于axios的封裝過(guò)程
這篇文章主要介紹了vue開(kāi)發(fā)中關(guān)于axios的封裝過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
vue使用GraphVis開(kāi)發(fā)無(wú)限拓展的關(guān)系圖譜的實(shí)現(xiàn)
本文主要介紹了vue使用GraphVis開(kāi)發(fā)無(wú)限拓展的關(guān)系圖譜,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
關(guān)于Vue?CLI3中啟動(dòng)cli服務(wù)參數(shù)說(shuō)明
這篇文章主要介紹了關(guān)于Vue?CLI3中啟動(dòng)cli服務(wù)參數(shù)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04
vue在history模式下打包部署問(wèn)題及解決方案
這篇文章主要介紹了vue在history模式下打包部署問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03
Vue3使用el-table組件實(shí)現(xiàn)分頁(yè)、多選以及回顯功能
這篇文章主要介紹了Vue3使用el-table組件實(shí)現(xiàn)分頁(yè)、多選以及回顯功能,文中通過(guò)代碼示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-09-09
通過(guò)實(shí)例解析vuejs如何實(shí)現(xiàn)調(diào)試代碼
這篇文章主要介紹了通過(guò)實(shí)例解析vuejs如何實(shí)現(xiàn)調(diào)試代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
vue3.0 CLI - 2.6 - 組件的復(fù)用入門(mén)教程
這篇文章主要介紹了 vue3.0 CLI - 2.6 - 組件的復(fù)用,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2018-09-09
vue前端sku實(shí)現(xiàn)的方法小結(jié)
這篇文章主要為大家詳細(xì)介紹了vue前端sku實(shí)現(xiàn)的相關(guān)方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下2024-11-11

