赞
踩
首先在vue项目中src文件夹下新建request文件夹,关于接口封装文件都放在request文件夹中。
然后在request文件夹中创建index.js,url.js,api.js三个js文件。
url.js文件主要放置项目中api请求域名和打包的域名(包括测试环境,预生产环境,生产环境)
const VUE_APP_MODE = process.env.VUE_APP_MODE; let baseURL; if (VUE_APP_MODE == 'development') { // 本地 baseURL = 'http://127.0.0.1:8888';//测试地址 } else { // pre 预生产 // prod 生产 switch (VUE_APP_MODE) { case 'test':// 测试 baseURL = 'http://test.com/api'; break; case 'pre':// 预生产 baseURL = 'http://pre.com'; break; case 'prod':// 生产 baseURL = 'http://prod.com'; break; default:// 测试 baseURL = 'http://test.com'; break; } } module.exports = { baseURL };
index.js文件主要对axios封装,添加请求拦截器和响应拦截器
/** * 请求封装 */ import axios from 'axios'; import configUrl from './url.js'; import store from '../store'; const service = axios.create({ baseURL: configUrl.baseURL, // withCredentials: true, // 当跨域请求时发送cookie timeout: 15000 // 请求超时 }); //添加请求拦截器 请求接口统一添加token service.interceptors.request.use( config =>{ config.headers.token = store.getters.token || ''; //请求添加token return config; }, error =>{ return Promise.reject(error); } ) // 响应拦截器 service.interceptors.response.use( response => { //如果接口返回token,替换本地旧token if (response.headers.token) { sessionStorage.setItem("token", response.headers.token); } //自定义设置后台返回code对应的响应方式 if (response.data.code == 203) { // 未登录或登录超时 return Promise.reject(new Error('登录超时')); } else { //接口正常,返回数据 return response; } }, error => { if (error.message) { // this.$massage.error('服务器开小差了,请稍后再试!') //错误响应 alert('服务器开小差了,请稍后再试!') } return Promise.reject(error); } ); //暴露出封装过的服务 export default service;
api.js文件主要放置项目中的接口 (post和get两种参数不同,注意区别data和params)
//引入上边封装的axios文件 import request from "@/request"; // import QS from "qs"; //获取用户信息 post请求 export const getUserInfo = data => { return request({ url: "/user/info", method: "POST", headers:{ "content-type": "application/json;charset=UTF-8" }, data }); }; //下载用户上传模板 get请求 export const downLoadTemplate = params=> { return request({ url: "/user/info/template", method: "GET", headers:{ "content-type": "application/json;charset=UTF-8" }, params }); };
以上就是axios的封装方法,请求拦截器和响应拦截器的添加方法。
api的使用方法:
<template> <div> </div> </template> <script> import { getUserInfo } from '@/request/api' export default { name:'', components: {}, data() { return { } }, methods: { getUserInfo(data={}){//获取用户信息 const loading = this.$loading() //请求响应开始,打开loading const params = { //参数 phone:this.phone, password:this.password, } getUserInfo(params).then(res=>{ if(res.data.code===200){ // 请求成功callback }else{ // 请求失败callback this.$messageError.call(this,res.data.msg) } loading.close() //请求响应结束,关闭loading }).catch(()=>{ loading.close() //请求响应结束,关闭loading }) }, } } </script> <style lang='scss' scoped> </style>
如果感觉以上代码有用,请点个赞,谢谢!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。