国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Vue2 配置 Axios api 接口調(diào)用文件的方法

2019-11-19 14:56:45
字體:
供稿:網(wǎng)友

前情回顧

在上一篇中,我們通過配置基本的信息,已經(jīng)讓我們的項(xiàng)目能夠正常的跑起來了。但是,這里還沒有涉及到 AJAX 請(qǐng)求接口的內(nèi)容。

vue 本身是不支持 ajax 接口請(qǐng)求的,所以我們需要安裝一個(gè)接口請(qǐng)求的 npm 包,來使我們的項(xiàng)目擁有這個(gè)功能。

這其實(shí)是一個(gè)重要的 unix 思想,就是一個(gè)工具只做好一件事情,你需要額外的功能的時(shí)候,則需要安裝對(duì)應(yīng)的軟件來執(zhí)行。如果你以前是一個(gè) jquery 重度用戶,那么可能理解這個(gè)思想一定要深入的理解。

支持 ajax 的工具有很多。一開始,我使用的是 superagent 這個(gè)工具。但是我發(fā)現(xiàn)近一年來,絕大多數(shù)的教程都是使用的 axios 這個(gè)接口請(qǐng)求工具。其實(shí),這本來是沒有什么差別的。但是為了防止你們?cè)诳戳宋业牟┪暮推渌奈恼轮螅a(chǎn)生理念上的沖突。因此,我也就改用 axios 這個(gè)工具了。

本身, axios 這個(gè)工具已經(jīng)做了很好的優(yōu)化和封裝。但是,在使用的時(shí)候,還是略顯繁瑣,因此,我重新封裝了一下。當(dāng)然,更重要的是,封裝 axios 這個(gè)工具是為了和我以前寫的代碼的兼容。不過我封裝得很好,也推薦大家使用。

封裝 axios 工具,編輯 src/api/index.js 文件

首先,我們要使用 axios 工具,就必須先安裝 axios 工具。執(zhí)行下面的命令進(jìn)行安裝

npm install axios -D

npm install axios -D

由于宿舍翻墻條件不好,這里使用 cnpm 替代

這樣,我們就安裝好了 axios 工具了。

還記得我們?cè)诘谌┪闹姓淼南到y(tǒng)結(jié)構(gòu)嗎?我們新建了一個(gè) src/api/index.js 這個(gè)空文本文件,就那么放在那里了。這里,我們給它填寫上內(nèi)容。

// 配置API接口地址var root = 'https://cnodejs.org/api/v1'// 引用axiosvar axios = require('axios')// 自定義判斷元素類型JSfunction 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) }}

 好,我們寫好這個(gè)文件之后,保存。

2017年10月20日補(bǔ)充,刪除了評(píng)論中有人反映會(huì)出錯(cuò)的 return ,確實(shí)這個(gè) return 是沒有什么作用的。不過我這邊確實(shí)沒出錯(cuò)。沒關(guān)系啦,本來就沒啥用,只是一個(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 文件

這次呢,我們沒有上來就調(diào)整 main.js 文件,因?yàn)樵嘉募团渲玫帽容^好,我就沒有刻意的想要調(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 = apiVue.config.productionTip = false/* eslint-disable no-new */new Vue({ el: '#app', router, template: '<App/>', components: { App }})

 好了,這樣,我們就可以在項(xiàng)目中使用我們封裝的 api 接口調(diào)用文件了。

測(cè)試一下看看能不能調(diào)通

我們來修改一下 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é)果打印出來。

我們?cè)跒g覽器中打開控制臺(tái),看看 console 下面有沒有輸出入下圖一樣的內(nèi)容。如果有的話,就說明我們的接口配置已經(jīng)成功了。

cnodejs.org 接口數(shù)據(jù)演示

cnodejs.org 接口數(shù)據(jù)演示

好,如果你操作正確,代碼沒有格式錯(cuò)誤的話,那么現(xiàn)在應(yīng)該得到的結(jié)果是和我一樣的。如果出錯(cuò)或者怎么樣,請(qǐng)仔細(xì)的檢查代碼,看看有沒有什么問題。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 吉木萨尔县| 民乐县| 巴楚县| 庐江县| 台南市| 甘肃省| 宁晋县| 舞钢市| 泰宁县| 弥渡县| 安义县| 吉林市| 丰城市| 利津县| 赣州市| 五莲县| 乐安县| 上犹县| 蛟河市| 崇州市| 南乐县| 丹阳市| 长沙县| 如皋市| 彝良县| 岳阳县| 南郑县| 乐清市| 衡山县| 平度市| 许昌县| 金堂县| 南宁市| 金昌市| 赤水市| 雷山县| 封丘县| 南投市| 宣恩县| 乌鲁木齐县| 咸宁市|