axios请求的问题

本来不想记录,但是实在没有办法,因为总是会出现post请求,后台接收不到数据的情况,还是记录一下如何的解决的比较好。

但是我使用export const addPsiPurOrder = data => request.post('/psi/psiPurOrder/add', data);

下面是封装的代码。后台接收不到数据.

出现问题的主要原因是java对象中如果有日期字段,且这些字段从前台传给后端,一定要加上下面的字段。需要加上下面的配置,

js 复制代码
import axios, { AxiosRequestConfig, AxiosInstance } from 'axios'
import { baseURL } from '@/config/domain'
import { TokenName } from '@/config/const'
import { useAppStoreWithOut } from '@/store'
import { usePermission } from '@/hooks'
import router from '@/router'
import { localMng } from '@/utils/storage-mng'

class Request {
	private baseConfig: AxiosRequestConfig = {
		baseURL,
		headers: {
			'Group':'xxxx',
			'Tenat':'yyyy',
			'source': 'zzzz',
		},
		timeout: 10000,
	}

	private instance: AxiosInstance = axios.create(this.baseConfig)

	public constructor() {
		const token = localMng.getItem(TokenName)
		if (token) {
			this.setHeader({
				Authorization: token,
			})
		} else {
			this.initInstance()
		}
	}

	private initInstance() {
		this.instance = axios.create(this.baseConfig)
		this.setReqInterceptors()
		this.setResInterceptors()
	}

	// 请求拦截器
	private setReqInterceptors = () => {
		this.instance.interceptors.request.use(
			config => {
				// const { checkApiPermission } = usePermission()
				config.cancelToken = new axios.CancelToken(function executor(c) {
					// if (!checkApiPermission(config.url)) {
					//   c(config.url + '没有权限')
					//   router.push('/error/forbidden')
					// }
				})
				// console.log(`%c++++++ 开始请求:${config.url} ++++++`, 'color:green')
				// console.log(config.data)
				// console.log(`%c++++++ end ++++++`, 'color:green')
				return config
			},
			err => {
				window.$message.error('请求失败')
				return Promise.reject(err)
			}
		)
	}

	// 响应拦截器
	private setResInterceptors = () => {
		this.instance.interceptors.response.use(
			res => {
				let { success, code, body, msg } = res.data
				if(success || (!code || code == 200 || code == '0000')){ code = 200 }
				switch (code*1) {
					case 200:
						console.log(res.data,'res');
						return Promise.resolve(body || res.data)
					case 40301:
						window.$message.warning(msg || '无权限')
						const appStore = useAppStoreWithOut()
						appStore.logout()
						return Promise.reject(res.data)
					default:
						window.$message.error(msg || '响应失败')
						return Promise.reject(res.data)
				}
			},
			err => {
				if (!axios.isCancel(err)) {
					window.$message.error('响应失败')
				}
				return Promise.reject(err)
			}
		)
	}

	// 设置请求头
	public setHeader = (headers: any) => {
		this.baseConfig.headers = { ...this.baseConfig.headers, ...headers }
		this.initInstance()
	}

	// get请求
	public get = (url: string, data = {}, config: AxiosRequestConfig<any> = {}): Promise<any> =>
		this.instance({ url, method: 'get', params: data, ...config })

	// post请求
	public post = (url: string, data = {}, config: AxiosRequestConfig<any> = {}): Promise<any> =>{
		console.log({...config})
		return this.instance({ url, method: 'post', data, ...config });
	}
		

	public postForm = (url: string, data = {} , config: AxiosRequestConfig<any> = {}): Promise<any> => {
		config.headers  = {...this.baseConfig.headers,'Content-Type': "multipart/form-data"}
		return this.instance({ url, method: 'post', data, ...config })
	}

	public postJson = (url: string, data = {} , config: AxiosRequestConfig<any> = {}): Promise<any> => 
	axios({
		...this.baseConfig,
		headers:{
			...this.baseConfig.headers,
			'Content-Type': "application/json;charset=utf-8"
		},
		url,
		method: 'post',
		data,
		...config,
	})

	// 不经过统一的axios实例的post请求
	public postOnlyFile = (url: string, data = {} , config: AxiosRequestConfig<any> = {}): Promise<any> =>
	axios({
		...this.baseConfig,
		headers:{
			...this.baseConfig.headers,
			'Content-Type': "application/x-www-form-urlencoded"
		},
		url,
		method: 'post',
		data,
		...config,
	})

	// put请求
	public put = (url: string, data = {}, config: AxiosRequestConfig<any> = {}): Promise<any> =>
		this.instance({ url, method: 'put', data, ...config })

	// 不经过统一的axios实例的get请求
	public postOnly = (url: string, data = {}, config: AxiosRequestConfig<any> = {}): Promise<any> =>
		axios({
			...this.baseConfig,
			url,
			method: 'post',
			data,
			...config,
		})


	public getOnlyFile = (url: string, data = {} , config: AxiosRequestConfig<any> = {}): Promise<any> =>
		axios({
			...this.baseConfig,
			url,
			method: 'get',
			responseType:'blob',
			params: data,
			...config,
		})

	public getOnly = (url: string, data = {}, headers , config: AxiosRequestConfig<any> = {}): Promise<any> =>
		axios({
			...this.baseConfig,
			headers:{
				...this.baseConfig.headers,
				...headers,
			},
			// this.baseConfig.headers:{ ...this.baseConfig.headers, ...headers },
			url,
			method: 'get',
			params: data,
			...config,
		})

	// delete请求
	public deleteBody = (url: string, data = {}, config: AxiosRequestConfig<any> = {}): Promise<any> =>
		this.instance({ url, method: 'delete', data, ...config })

	public deleteParam = (url: string, data = {}, config: AxiosRequestConfig<any> = {}): Promise<any> =>
		this.instance({ url, method: 'delete', params: data, ...config })
}

export default new Request()
相关推荐
90后的晨仔1 天前
从 H5 到 uni-app:一篇写给前端小白的"翻译指南"
前端·vue.js·前端框架
陈随易1 天前
moon,apt和yum之外linux系统命令安装新选择
前端·后端·程序员
IT小盘1 天前
13-企业Prompt模板-角色任务约束与输出格式
java·前端·prompt
徐小夕1 天前
开源!我用SQLite + DuckDB打造了一款可视化AI问数平台
前端·算法·github
leslie1181 天前
babel笔记
前端
用户059540174461 天前
Redis 记忆存储踩坑实录:一个并发写入 Bug 让我排查了 4 小时
前端·css
小徐_23331 天前
Wot UI 2.3.0 发布:二维码组件来了,Open Wot 与 wot-starter 同步更新
前端·微信小程序·uni-app
kyriewen1 天前
Claude自己跑出去hack了3家公司——我为什么还在用它写代码
前端·ai编程·claude
IT_陈寒1 天前
SpringBoot自动配置的坑,这次真踩疼我了
前端·人工智能·后端
子兮曰1 天前
AI 浏览器 Agent 的安全困局:当自动化工具可以偷走你的登录态
前端·人工智能·后端