vue项目中如何封装api,使请求方法清晰,适合协作开发

以下是模仿element-admin框架中的那种模式,感觉非常好用,所以就搬到了自己的项目中,在此记录以下。

首先我们需要有一个request.js:(封装axios的拦截器,并返回axios实例对象)

import axios from 'Axios';
import tools from '@/utils/tools';

// 创建一个axios实例
const service = axios.create({
    baseURL:"", // url = base url + request url
    withCredentials: true, // send cookies when cross-domain requests
    timeout: 10000 // request timeout 10s
});

// 请求拦截器
service.interceptors.request.use(config => {
    // do something before request is sent
    return config;
},error => {
    // do something with request error
    console.log(error) // for debug
    return Promise.reject(error);
});

// 响应拦截器
service.interceptors.response.use(response => {
    //do something before response
    if (response.status >= 200 && response.status <= 210) {
        return response;
    } else {
        //不走
    }
},
error => {
    console.log('err' + error); // for debug
    tools.error(error);
    return Promise.reject(error);
})

export default service;

比如说要将用户相关的请求方法放在user.js中,(这样随着项目的变大,会比较清晰)

user.js:

import request from '@/utils/request';
import proxy from '@/utils/proxy';

export function login(data) {//例子
    return request({
        url: proxy.lichao+'/user/login',
        method: 'post',
        data
    })
}
  
export function getInfo(token) {//例子
    return request({
        url: proxy.lichao+'/user/info',
        method: 'get',
        params: { token }
    })
}

export function getToken(){//获取token
    return request({
       url:proxy.xuehui+"/qiniu/token",
       method:"get",
       params:null,
    })
}

注意到有一个proxy.js是搞代理的

proxy.js

const onlineIP = window.location.origin

//全局变量
const lipeng =
  process.env.NODE_ENV === "production" ? onlineIP + "/qiantai" : "qiantai"
const xuehui =
  process.env.NODE_ENV === "production" ? onlineIP + "/qiantai" : "qiantai"
const lichao =
  process.env.NODE_ENV === "production" ? onlineIP + "/qiantai" : "qiantai"

export default {
  lipeng,
  xuehui,
  lichao
}

比如在页面洪使用:

import {getToken} from "@/api/user";
getToken().then(res=>{
      console.log(res)
    }).catch(err=>{
      console.log(err)
    })

.

原文地址:https://www.cnblogs.com/fqh123/p/12882840.html