Vue.js 项目接口管理

在vue开发中,会涉及到很多接口的处理,当项目足够大时,就需要定义规范统一的接口,如何定义呢?
方法可能不只一种,本文使用axios+async/await进行接口的统一管理。

一般来说,网站的首页都是复杂的,会用到很多其他页面也会用到api,所以接口统一管理可以做到api的复用:

首先,在src目录下新建一个文件夹,我这里叫apis,后台提供的所有接口都在这里定义:

cd src # 切换到src目录
mkdir apis # 新建apis文件

第二步,按照后台文档划分的模块新建js文件,这里简单举个例子:

资讯模块: info.js
登录注册模块: member.js
个人信息模块 user_info.js
....
cd apis # 切换到apis目录
touch info.js member.js user_info.js # 新建js文件
现在的目录大概是这个样子:
src
apis
info.js
member.js
user_info.js
main.js

第三步,需要引入axios做相应的配置。

在apis下新建一个文件夹,叫http.js,在里面做axios相应的配置。
touch http.js
//新建http.js文件
配置如下:

import axios from 'axios'
//创建axios的一个实例 
var instance = axios.create({
    baseURL: xxx,
    timeout:6000
})
//------------------- 一、请求拦截器 忽略
instance.interceptors.request.use(function(config){
   return config;
},
function(error)
{
    // 对请求错误做些什么
    return Promise.reject(error);
});
//----------------- 二、响应拦截器 忽略
instance.interceptors.response.use(function(response)
{
    return response.data;
},
function(error)
{
    // 对响应错误做点什么
    return Promise.reject(error);
});
export default function (method, url, data = null)
    {
        method = method.toLowerCase();
        if (method == 'post')
        {
            return instance.post(url, data)
        } else  if  (method ==  'get')
      {
            return instance.get(url,{  params: data })
        }   else if (method == 'delete')
        {
            return instance.delete(url, {   params: data  })
        } else if (method ==  'put') {
            return instance.put(url, data)
        } else {
            console.error('未知的method' + method)
            return  false
        }
    }

配置简要说明一下:
引入axios,新建了个axios的实例(axios的实例的axios的功能一样)。
请求拦截器响应拦截器不是本文重点,略过。
第30行代码及以后是重点。

第四步,在apis下面的js文件中引入 http.js导出的函数,拿其中一个文件 member.js说明:

//member.js 用于定义用户的登录、注册、注销等
import req from './http.js'
//定义接口  
//在这里定义了一个登陆的接口,把登陆的接口暴露出去给组件使用
export const LOGIN = params = >req('post', '/operator/login', params)

//这里使用了箭头函数,转换一下写法:
//export const LOGIN=function(req){
//    return req('post','/operator/login',params)
//}

//定义注册接口
export const REG = params = >req('post', '/operator/reg', params)

//定义注销接口
export const LOGOUT = params = >req('post', '/operator/logout', params)

第五步,在组件中使用接口。

登陆组件 Login.js使用登录接口:

//Login.vue
< template >
<div >
<input type = 'text'v - model = 'user.userId' >
<input type = 'text'v - model = 'user.pass' ></div>
</template >
<script >
//1. 引入登录的接口定义
import {LOGIN} from '../../apis/user.js'
export default {
        data() {
            return{
                user:{
                    userId:'',
                    pass: ''
                }
            }
        },
        methods {
            //2. 定义登录的逻辑
            async login() {
                //2.1 awiat LOGIN(this.user) 
                //等待LOGIN(this.user)执行完,
                //把返回值给user_info
                let user_info = await LOGIN(this.user)
                //2.2假设登录成功,返回的数据应该是 
                //user_info={code:200,msg:'success',data:{token:'xxxxx'}}
                //然后根据返回的数据做相应的处理,比如储存token
            }
        },
        mounted() {
            //3. 执行登录
            this.login()
        }
    }
    < /script>

这样定义接口虽然看起来麻烦点,但有以下几个好处:
代码看起来规范,所有的接口都在一个文件夹定义,不用分散的各个组件,维护起来简单,例如后台的一些url变了,改起来也方便。
可以做到接口一次定义,到处使用。
例如首页使用了很多api:

//index.js 首页的js文件
import {GET_USER_INFO} from 'apis/user_info.js' //用户信息
import {GET_CURRENT_INFO,GET_HOT_INFO} from 'apis/info.js' //热门资讯 最新资讯
import {GET_HOT_LECTRUE} from 'apis/lectrue.js' //讲座推荐
用户界面也会用到用户信息api:
//user_info.js用户信息页面
import {GET_USER_INFO} from 'apis/user_info.js' //用户信息

感谢原创

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352

推荐阅读更多精彩内容