http.js【axios的封装,拦截器】

本文介绍如何在Vue项目中全局配置Axios,包括设置超时时间、请求头、基URL、拦截器等,确保API调用的一致性和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


export default {

	install: function(Vue,axios,router) {

		axios.defaults.timeout = 5000;

		axios.defaults.headers.post['accept'] = 'application/json';
		axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8';

// axios.defaults.headers.common['token'] = localStorage.getItem("currentUser_token");

		axios.defaults.baseURL = 'http://192.168.4.195:9092/';
		// axios.defaults.baseURL = 'http://192.168.4.64:9092/';

		axios.interceptors.request.use(
			config => {

				if (sessionStorage.getItem("currentUser_token")) {
					config.headers.common['token'] = sessionStorage.getItem("currentUser_token");

				}
				return config;
			},
			err => {
				return Promise.reject(err);
			});


// http response 拦截器
		axios.interceptors.response.use(
			response => {
				return response;
			},
			error => {
				if (error.response) {
					switch (error.response.status) {
						case 401:
							// 401 清除token信息并跳转到登录页面
							// store.commit('users/clearUser');
							router.replace({
								path: '/',
								query: {redirect: router.currentRoute.fullPath}
							});
							break;
						case 403:
							// 403 无权限,跳转到首页
							router.replace({
								path: '/',
								query: {redirect: router.currentRoute.fullPath}
							});
							break;
					}
				}
				// console.log(JSON.stringify(error));//console : Error: Request failed with status code 402
				/*return Promise.reject(error.response.data)*/
				return Promise.reject('');
			});
		//将axios挂载到Vue原型上
		Vue.prototype.axios = axios;
		Vue.prototype.http = params => {
			return new Promise((resolve, reject) => {
				axios.post("/CallMethod", params)
					.then(response => {

						resolve(response.data);
					})
					.catch(err => {
						reject(err);
					})
			})
		};
	}
}

 

### 封装 Axios HTTP 请求与响应拦截器的实现方法 Axios 是一个基于 Promise 的 HTTP 库,支持浏览器和 Node.js 环境。它提供了丰富的功能,例如请求和响应拦截器、自动转换 JSON 数据等[^1]。以下是一个完整的封装示例,包含请求和响应拦截器的实现。 #### 1. 创建 Axios 实例 通过 `axios.create` 方法创建一个自定义的 Axios 实例,并设置全局配置,如基础 URL 和超时时间。 ```javascript import axios from 'axios'; const service = axios.create({ baseURL: process.env.VUE_APP_BASE_API, // 设置基础 URL timeout: 5000, // 超时时间 (毫秒) }); ``` #### 2. 配置请求拦截器 在请求发送之前,可以对请求进行一些预处理操作,例如添加认证 token 或者修改请求头。 ```javascript // 请求拦截器 service.interceptors.request.use( (config) => { // 在发送请求之前做些什么 const token = localStorage.getItem('token'); // 假设 token 存储在 localStorage 中 if (token) { config.headers['Authorization'] = `Bearer ${token}`; // 设置请求头 } return config; }, (error) => { // 对请求错误做些什么 return Promise.reject(error); } ); ``` #### 3. 配置响应拦截器 在接收到响应数据后,可以对其进行统一处理,例如检查状态码或解析错误信息。 ```javascript // 响应拦截器 service.interceptors.response.use( (response) => { // 对响应数据做点什么 const res = response.data; if (res.code !== 200) { // 根据业务需求判断状态码 console.error(`Error: ${res.message}`); return Promise.reject(new Error(res.message || 'Request failed')); } else { return res; } }, (error) => { // 对响应错误做点什么 if (error.response) { switch (error.response.status) { case 401: console.error('Unauthorized'); break; case 403: console.error('Forbidden'); break; case 404: console.error('Not Found'); break; default: console.error('Network error'); } } return Promise.reject(error); } ); ``` #### 4. 封装通用请求方法 为了简化接口调用,可以封装常用的 HTTP 方法(如 GET 和 POST)。 ```javascript export function request(config) { return service(config); // 调用 Axios 实例 } export function get(url, params = {}) { return request({ url, method: 'get', params, }); } export function post(url, data = {}) { return request({ url, method: 'post', data, }); } ``` #### 5.Vue 组件中使用 将封装好的方法挂载到 Vue 的原型上,以便在组件中直接调用。 ```javascript import Vue from 'vue'; import { get, post } from './api'; // 引入封装的请求方法 Vue.prototype.$get = get; Vue.prototype.$post = post; // 在组件中使用 mounted() { this.$post('/api/v2/movie/top250') .then((response) => { console.log(response); }) .catch((error) => { console.error(error); }); } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值