狗林技术

  • 首页
  • 技术分享
    • PHP
    • Go
    • Linux
    • JavaScript
    • Vue
    • 其他

Menu

  • 首页
  • 技术分享
    • PHP
    • Go
    • Linux
    • JavaScript
    • Vue
    • 其他
  • 1970.01.01遇到Undefined constant "CURL_SSLVERSION_TLSv1_2"错误
  • 1970.01.01linux防火墙操作
  • 1970.01.01linux centos系统安装php的redis扩展
  • 1970.01.01Golang实现自定义JWT生成与验证
  • 1970.01.01php项目中Nginx文件解析漏洞
  • 1970.01.01Nginx配置跨域
更多
个人简介
个人简介


职业:PHP开发,Go开发

          前端开发

现居:浙江省-杭州市

Email:1047571953@qq.com

                               

热门文章

  • git的学习过程

    git的一些常用命令

  • Go文档

    Go http://www.topgoer.com gorm https://learnku.com/docs/gorm/v2/about-mirror-image/9754 gin https://www.kancloud.cn/lhj0702/sockstack_gin/1805355

  • tp5.1用GatewayWorker做一个简单的聊天室

    tp5.1用GatewayWorker做一个简单的聊天室 , 源码文件

  • TP5.1 查询数据库中上一条和下一条记录

    ->where("id", ">", $id)->order("id", "asc")->find();<br/> ​->where('id' , '<' , $id)->order("id", "desc")->find();

联系我

    zxl77l 微信号 1047571953@qq.com QQ邮箱 1047571953 QQ号

Vue中封装Axios请求方法

分类:Vue   作者:   - 发布于:2021/06/08   800

创建目录utils , 在里面创建requests.js文件,写入

import axios from 'axios'
import qs from 'qs';
import {
	Message
} from 'element-ui';
// 创建新的axios实例,
const service = axios.create({
	// baseURL: process.env.BASE_API,
	baseURL: "http://xxxxxxxx.com/api/",
	// 超时时间 单位是ms
	timeout: 5 * 1000
})
// 请求拦截器
service.interceptors.request.use(config => {
	// config.data = JSON.stringify(config.data); //数据转成json格式
	config.data = qs.stringify(config.data); //数据转成键值对格式
	return config
}, error => {
	Promise.reject(error)
})

// 响应拦截器
service.interceptors.response.use(response => {
	response.datas = response.data
	//接收到响应数据并成功后的一些公共的处理等
	response.code = response.data.code
	response.msg = response.data.msg
	response.data = response.data.data
	return response
}, error => {
	// 接收到异常响应
	if (error && error.response) {
		//根据响应嘛处理
		switch (error.response.status) {
			case 400:
				error.message = '错误请求'
				break;
			case 401:
				error.message = '未授权,请重新登录'
				break;
			case 403:
				error.message = '拒绝访问'
				break;
			case 404:
				error.message = '请求错误,未找到该资源'
				break;
			case 405:
				error.message = '请求方法未允许'
				break;
			case 408:
				error.message = '请求超时'
				break;
			case 500:
				error.message = '服务器端出错'
				break;
			case 501:
				error.message = '网络未实现'
				break;
			case 502:
				error.message = '网络错误'
				break;
			case 503:
				error.message = '服务不可用'
				break;
			case 504:
				error.message = '网络超时'
				break;
			case 505:
				error.message = 'http版本不支持该请求'
				break;
			default:
				error.message = `连接错误${error.response.status}`
		}
	} else {
		// 超时处理
		if (JSON.stringify(error).includes('timeout')) {
			// Message.error('服务器响应超时,请刷新当前页')
		}
		error.message = '服务器错误!'
	}

	Message.error(error.message)
	
	return Promise.resolve(error.response)
})
export default service

在utils目录中创建http.js文件 , 写入

import requests from './requests'
import {
	Message
} from 'element-ui';

const http = {
	/**
	 * methods: 请求
	 * @param method 
	 * @param url 请求地址 
	 * @param params 请求参数
	 * @param header 请求头
	 */
	request(method, url, params, header={
		'Content-Type': 'application/x-www-form-urlencoded', //配置请求头
	}) {
		const config = {
			method: method,
			url: url,
			headers:header
		}
		//获取AdminToken
		const AdminToken = localStorage.getItem("AdminToken");
		if (AdminToken != null) {
			config.headers.AdminToken = AdminToken; //AdminToken携带在请求头中
		}
		if (params) {
			if (method == 'post') {
				config.data = params
			} else {
				config.params = params
			}
		}
		return requests(config)
	},
	/**
	 * 对返回数据进行处理
	 * @param {object} request 请求对象
	 * @param {function} successFun 返回状态码 code== 200的回调方法
	 * @param {function} errorFun   返回状态码 code!= 200的回调方法
	 */
	resHandle(request,successFun=false,errorFun=false){
		request.then((response) => {
			if(response){
				if (response.code == 200) {
					if(successFun){
						successFun(response)
					}
				}else if(response.code == 501){
					localStorage.removeItem("AdminToken")
					localStorage.removeItem("AdminUser")
				} else {
					Message.error({
						duration:1000,
						message:response.msg,
						onClose:function(){
							if(errorFun){
								errorFun(response)
							}
						}
					});
				}
			}
		})
	}
}
export default http

封装Api接口方法 , 封装的api文件放在api目录下

AdminUserApi.js接口方法

import http from '../utils/http'

export function list(params,successFun,errorFun) {
	http.resHandle(http.request('post', 'adminuser/list', params), successFun, errorFun);
}
export function create(params,successFun,errorFun) {
	http.resHandle(http.request('post', 'adminuser/create', params), successFun, errorFun);
}
export function update(params,successFun,errorFun) {
	http.resHandle(http.request('post', 'adminuser/update', params), successFun, errorFun);
}
export function findform(params,successFun,errorFun) {
	http.resHandle(http.request('post', 'adminuser/findform', params), successFun, errorFun);
}
export function del(params,successFun,errorFun) {
	http.resHandle(http.request('post', 'adminuser/delete', params), successFun, errorFun);
}

在.vue文件中可直接import引入封装的接口方法进行调用 , 也可以注册一个容器变量进行动态require加载对应接口文件来调用方法

在api目录中创建Api.js

//api容器
//require 值拷贝 直接调用
const Api = {
	newApi(path){
		return require('./'+path+'Api')//传入参数可以为相对路径或者绝对路径
	}
}

export default Api

在main.js引入Api.js , 注册$Api全局变量

QQ图片20210608172811.png

绑定对应接口文件

QQ图片20210608172811.png

调用接口方法

//添加
this.$bind.AdminUser.create(this.ruleForm,function(res){
	thas.FormSubmitNotify(res,formName)
})
//更新
this.$bind.AdminUser.update(this.ruleForm,function(res){
	thas.FormSubmitNotify(res)
})
//删除
this.$bind.AdminUser.del({
	id:row.id
},function(res){
	thas.$notify({
		type: 'success',
		title: '提示',
		duration:1500,
		message:res.msg,
		onClose:function(){
			thas.tableData.splice(index,1)
		}
	})
})
//查询
this.$bind.AdminUser.findform({id:this.userid},function(res){
	if(res.data.isEdit){
		thas.ruleForm = res.data
	}else{
		thas.ruleForm.role = res.data.role
	}
})


上一篇 : 没有上一篇了哦!

下一篇 : 没有下一篇了哦!

-------------本文结束感谢您的阅读-------------

首页 技术分享

湘ICP备2021006798号

Copyright © 2021 狗林技术. All Rights Reserved.

友情链接: 测试链接

大家都在搜

  • 张三
  • 李四
  • 王二

关注我

微信号