专栏名称: SegmentFault思否
SegmentFault (www.sf.gg)开发者社区,是中国年轻开发者喜爱的极客社区,我们为开发者提供最纯粹的技术交流和分享平台。
目录
相关文章推荐
程序员的那些事  ·  OpenAI ... ·  昨天  
OSC开源社区  ·  2024: 大模型背景下知识图谱的理性回归 ·  3 天前  
程序猿  ·  “我真的受够了Ubuntu!” ·  3 天前  
程序员的那些事  ·  惊!小偷“零元购”后竟向 DeepSeek ... ·  3 天前  
51好读  ›  专栏  ›  SegmentFault思否

vue 项目接口管理

SegmentFault思否  · 公众号  · 程序员  · 2019-01-22 08:00

正文

在vue开发中,会涉及到很多接口的处理,当项目足够大时,就需要定义规范统一的接口,如何定义呢?

方法可能不只一种,本文使用axios+async/await进行接口的统一管理。

本文使用vue-cli生成的项目举例。

举例

拿segmentfault的官网简单举个例子,先看一下官网:

看下网站,脑补一下后台给出的文档,如果后台不傻的话给出的文档肯定分模块的,假设后台给出的文档分为了以下几个模块(假设的,不要较真哈):

  • 资讯模块 (我的订阅、热门资讯)

  • 问答模块

  • 专栏模块

  • 讲堂模块

  • 圈子模块

  • 发现模块

  • 个人信息模块

  • 用户登录注册模块

  • ...还有其他很多

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

那么如何做呢?

动手

1

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

  1. cd src  #切换到src目录

  2. mkdir apis  #新建apis文件

2

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

  • 资讯模块: info.js

  • 登录注册模块: member.js

  • 个人信息模块 user_info.js

  • ....

  1. cd apis #切换到apis目录

  2. touch info.js member.js user_info.js #新建js文件

现在的目录大概是这个样子:

  1. src

  2.    apis

  3.        info.js

  4.        member.js

  5.        user_info .js

  6.    main.js

3

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

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

  1. touch http.js //新建http.js文件

配置如下:

  1. import axios from 'axios'


  2. //创建axios的一个实例

  3. var instance = axios.create({

  4.    baseURL:xxx,

  5.    timeout: 6000

  6. })



  7. //------------------- 一、请求拦截器 忽略

  8. instance.interceptors.request.use(function (config) {


  9.    return config;

  10. }, function (error) {

  11.    // 对请求错误做些什么


  12.    return Promise.reject(error);

  13. });


  14. //----------------- 二、响应拦截器 忽略

  15. instance.interceptors.response.use(function (response) {


  16.    return response.data;

  17. }, function (error) {

  18.    // 对响应错误做点什么

  19.    return Promise.reject(error);

  20. });



  21. export default function (method, url, data = null) {

  22.    method = method.toLowerCase();

  23.    if (method == 'post') {

  24.        return instance.post(url, data)

  25.    } else if (method == 'get') {

  26.        return instance.get(url, { params: data })

  27.    } else if (method == 'delete') {

  28.        return instance.delete(url, { params: data })

  29.    }else if (method == 'put'){

  30.        return instance.put(url,data)

  31.    }else{

  32.        console.error('未知的method'+method)

  33.        return false

  34.    }

  35. }

配置简要说明一下:

  • 引入axios,新建了个axios的实例(axios的实例的axios的功能一样)。

  • 请求拦截器响应拦截器不是本文重点,略过。

  • 第30行代码及以后是重点,拉出来重点看一下。

  1. /**

  2. * 使用es6的export default导出了一个函数,导出的函数代替axios去帮我们请求数据,

  3. * 函数的参数及返回值如下:

  4. * @param {String} method  请求的方法:get、post、delete、put

  5. * @param {String} url     请求的url:

  6. * @param {Object} data    请求的参数

  7. * @returns {Promise}     返回一个promise对象,其实就相当于axios请求数据的返回值

  8. */

  9. export default function (method , url, data = null) {

  10.    method = method.toLowerCase();

  11.    if (method == 'post') {

  12.        return instance.post(url, data)

  13.    } else if (method == 'get') {

  14.        return instance.get(url, { params: data })

  15.    } else if (method == 'delete') {

  16.        return instance.delete(url, { params: data })

  17.    }else if(method == 'put'){

  18.        return instance.put(url,data)

  19.    }else{

  20.        console.error('未知的method'+method)

  21.        return false

  22.    }

  23. }

4

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

  1. //member.js 用于定义用户的登录、注册、注销等


  2. import req from './http.js'


  3. //定义接口  


  4. //在这里定义了一个登陆的接口,把登陆的接口暴露出去给组件使用

  5. export const LOGIN =params=>req('post','/operator/login',params)

  6. //这里使用了箭头函数,转换一下写法:

  7. //export const LOGIN=function(req){

  8. //    return req('post','/operator/login',params)

  9. //}


  10. //定义注册接口

  11. export const REG =params=>req('post','/operator/reg',params)

  12. //定义注销接口

  13. export const LOGOUT =params=>req('post','/operator/logout',params)

5.

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

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

  1. //Login.vue

  2.    

  3.        input type='text' v-modal='user.userId'>

  4.        input type='text' v-modal='user.pass'>

  5.    div>







请到「今天看啥」查看全文