VueJs 搭建Axios接口請(qǐng)求工具
axios 簡(jiǎn)介
axios 是一個(gè)基于Promise 用于瀏覽器和 nodejs 的 HTTP 客戶端,它本身具有以下特征:
- 從瀏覽器中創(chuàng)建 XMLHttpRequest
- 從 node.js 發(fā)出 http 請(qǐng)求
- 支持 Promise API
- 攔截請(qǐng)求和響應(yīng)
- 轉(zhuǎn)換請(qǐng)求和響應(yīng)數(shù)據(jù)
- 取消請(qǐng)求
- 自動(dòng)轉(zhuǎn)換JSON數(shù)據(jù)
- 客戶端支持防止 CSRF/XSRF
上一章,我們認(rèn)識(shí)了項(xiàng)目的目錄結(jié)構(gòu),以及對(duì)項(xiàng)目的目錄結(jié)構(gòu)做了一些調(diào)整,已經(jīng)能把項(xiàng)目重新跑起來了。今天我們來搭建api接口調(diào)用工具Axios。Vue本身是不支持ajax調(diào)用的,如果你需要這些功能就需要安裝對(duì)應(yīng)的工具。
支持ajax請(qǐng)求的工具很多,像superagent和axios。今天我們用的就是axios,因?yàn)槁犝f最近網(wǎng)上大部分的教程書籍都使用的是axios,本身axios這個(gè)工具就已經(jīng)做了很好的優(yōu)化和封裝,但是在使用時(shí),還是比較繁瑣,所以我們來重新封裝一下。
安裝Axios工具
cnpm install axios -D
在安裝的時(shí)候,一定要切換進(jìn)入咱們的項(xiàng)目根目錄,再運(yùn)行安裝命令,然后如提示以上信息,則表示安裝完成。
封裝Axios工具
編輯src/api/index.js文件(我們?cè)谏弦徽抡砟夸浗Y(jié)構(gòu)時(shí),在src/api/目錄新建了一個(gè)空的index.js文件),現(xiàn)在我們?yōu)樵撐募顚憙?nèi)容。
// 配置API接口地址 var root = 'https://cnodejs.org/api/v1' // 引用axios var axios = require('axios') // 自定義判斷元素類型JS function toType (obj) { return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase() } // 參數(shù)過濾函數(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)整。參考說明文檔地址: 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) } }
更多關(guān)于AxIos的解釋請(qǐng)參見:https://github.com/mzabriskie/axios
配置Axios工具
我們?cè)谑褂弥?,需要在src/main.js中進(jìn)行簡(jiǎn)單的配置,先來看一下原始的main.js文件
// The Vue build version to load with the `import` command // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 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 } })
修改為:
// The Vue build version to load with the `import` command // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 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)目中使用axios工具了,接下來我們來測(cè)試一下這個(gè)工具。
使用Axios工具
我們來修改一下 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>
我們?cè)贗ndex.vue中向?yàn)g覽器的控制臺(tái)輸入一些接口請(qǐng)求到的數(shù)據(jù),如果你和我也一樣,那說明我們的接口配置完成正確。如下圖:
如果你是按我的操作一步一步來,那最終結(jié)果應(yīng)該和我一樣。如果出錯(cuò)請(qǐng)仔細(xì)檢查代碼。
相關(guān)文章
VUE識(shí)別訪問設(shè)備是pc端還是移動(dòng)端的實(shí)現(xiàn)步驟
經(jīng)常在項(xiàng)目中會(huì)有支持pc與手機(jī)端需求,并且pc與手機(jī)端是兩個(gè)不一樣的頁面,這時(shí)就要求判斷設(shè)置,下面這篇文章主要給大家介紹了關(guān)于VUE識(shí)別訪問設(shè)備是pc端還是移動(dòng)端的相關(guān)資料,需要的朋友可以參考下2023-05-05vue修改props數(shù)據(jù)報(bào)錯(cuò)的問題及解決
這篇文章主要介紹了vue修改props數(shù)據(jù)報(bào)錯(cuò)的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08vue-cli項(xiàng)目?jī)?yōu)化方法- 縮短首屏加載時(shí)間
這篇文章主要介紹了vue-cli項(xiàng)目?jī)?yōu)化 縮短首屏加載時(shí)間,需要的朋友可以參考下2018-04-04詳解vue2.0 transition 多個(gè)元素嵌套使用過渡
這篇文章主要介紹了詳解vue2.0 transition 多個(gè)元素嵌套使用過渡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06vue-router+vuex addRoutes實(shí)現(xiàn)路由動(dòng)態(tài)加載及菜單動(dòng)態(tài)加載
本篇文章主要介紹了vue-router+vuex addRoutes實(shí)現(xiàn)路由動(dòng)態(tài)加載及菜單動(dòng)態(tài)加載,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09vue中實(shí)現(xiàn)在外部調(diào)用methods的方法(推薦)
下面小編就為大家分享一篇vue中實(shí)現(xiàn)在外部調(diào)用methods的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-02-02vue3 provide和inject底層組件的值不是響應(yīng)式的處理詳解
這篇文章主要為大家介紹了vue3 provide和inject底層組件的值不是響應(yīng)式的處理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08使用Vue進(jìn)行數(shù)據(jù)可視化實(shí)踐分享
在當(dāng)今的數(shù)據(jù)驅(qū)動(dòng)時(shí)代,數(shù)據(jù)可視化變得越來越重要,它能夠幫助我們更直觀地理解數(shù)據(jù),從而做出更好的決策,在這篇博客中,我們將探索如何使用 Vue 和一些常見的圖表庫(如 Chart.js)來制作漂亮的數(shù)據(jù)可視化效果,需要的朋友可以參考下2024-10-10