axios请求

axios 传递数组

get 请求中传递数组

import qs from 'qs'
http.get = function (url: string, params: any) {
    return axios.get(url, {
        params: params,
        paramsSerializer: (params) => {
            return qs.stringify(params, { indices: false })
        },
    })
}
params = {
    id: [1,2,3]
}
// 数组参数会转换为如下格式
url?id=1&id=2&id=3

常见的有以下几种格式

qs.stringfy({id: [1,2,3]}, { indices: false})
qs.stringify({ids: [1, 2, 3]}, {arrayFormat: ‘indices‘})
 //形式: id[0]=1&id1]=2&id[2]=3
qs.stringify({id: [1, 2, 3]}, {arrayFormat: ‘brackets‘})
 //形式:id[]=1&id[]=2&id[]=3
qs.stringify({id: [1, 2, 3]}, {arrayFormat: ‘repeat‘})
//形式: id=1&id=2&id=3
对 axios 的封装
import axios from 'axios'
import qs from 'qs'
import { Message } from 'element-ui'
import { getLocalStorage } from '../../src/utils/storage'

// 设置请求超时
axios.defaults.timeout = 30000
// post请求头的设置
axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8'

/*
    请求方法封装
*/
interface axiosObj {
    get?: any
    post?: any
    put?: any
    delete?: any
    sendForm?: any
}

// 请求拦截
axios.interceptors.request.use(
    (config) => {
        if (getLocalStorage('userInfo')) {
            const { token, userId, username } = JSON.parse(getLocalStorage('userInfo'))
            config.headers = {
                ...config.headers,
                token,
                userId,
                username,
            }
        }
        return config
    },
    (error) => {
        return Promise.reject(error)
    },
)
// 响应拦截
axios.interceptors.response.use(
    (response) => {
        if (response.status === 200 || response.status === 304) {
            checCode(response)
            return Promise.resolve(response)
        } else {
            return Promise.reject(response)
        }
    },
    (error) => {
        if (error.response.status === 504) {
            Message({
                message: '请求超时',
                type: 'error',
            })
        } else {
            const { message } = error.response.data
            Message({
                message,
                type: 'error',
            })
        }
        return Promise.reject(error.response)
    },
)

/*
 常见的请求方法get、post等
*/

const http: axiosObj = Object.create(null)

http.get = function (url: string, params: any) {
    return axios.get(url, {
        params: params,
        paramsSerializer: (params) => {
            return qs.stringify(params, { indices: false })
        },
    })
}

http.post = function (url: string, params: any) {
    return axios.post(url, params)
}

http.put = function (url: string, params: any) {
    return axios.put(url, params)
}

http.delete = function (url: string, params: any) {
    return axios.delete(url, params)
}

interface fileObj {
    file: any
    [key: string]: any
}
// 上传文件
http.sendForm = function (url: string, params: fileObj) {
    const formData = new FormData() as any
    params.file && formData.append('file', params.file)
    const param: dynamicObj = Object.create(null)
    Object.keys(params).map((key) => {
        if (key !== 'file') {
            param[key] = params[key]
        }
    })
    Object.keys(params).length > 0 && formData.append('params', JSON.stringify(param))
    return axios.post(url, formData)
}

// 检查业务逻辑
function checCode(response: any) {
    const data = response.data
    // 未登录
    if (data.ret === -100) {
        location.replace('/#/login')
    }
    if (data.data === null) {
        data.data = {}
    }
    const { ret, msg } = response.data
    if (ret !== 1) {
        Message({
            message: msg,
            type: 'error',
        })
    }
    return response
}
export default http

使用可查看基于 webpack4+vue++typeScript+element+axios
这是地址

### Axios 请求使用方法 Axios 是一个基于 Promise 的 HTTP 客户端,可以在浏览器和 Node.js 中使用。其主要特点是可以拦截请求和响应、取消请求以及自动转换 JSON 数据。 #### 安装 Axios 为了在 Vue 项目中使用 Axios,可以通过 npm 或 yarn 进行安装: ```bash npm install axios --save ``` 或者 ```bash yarn add axios ``` 这一步骤确保了 Axios 成功集成到开发环境中[^1]。 #### 基础配置与引入 完成安装后,在项目的入口文件或公共工具类中引入 Axios: ```javascript import axios from 'axios'; ``` 接着可以根据需求设置全局默认值,比如 API 地址前缀、超时时间等: ```javascript // 设置默认URL前缀 axios.defaults.baseURL = 'https://api.example.com'; // 设置请求超时时间为5秒 axios.defaults.timeout = 5000; ``` 以上操作简化了后续调用中的重复配置工作[^3]。 #### 发送 GET 和 POST 请求 对于简单的数据获取场景,可以直接利用 `get` 方法发起网络请求;而当涉及到提交表单或其他复杂的数据交互,则推荐采用 `post` 方式: ```javascript // 发起GET请求并处理成功/失败情况 axios.get('/user?ID=12345') .then(function (response) { console.log(response.data); }) .catch(function (error) { console.error(error); }); // 发起POST请求携带JSON格式body体 axios.post('/submit', { title: 'foo', body: 'bar' }) .then(function (response) { console.log(response.status); // 打印状态码 }) .catch(function (error) { console.error('Error:', error.message); }); ``` 上述代码片段展示了基本的同步流程控制逻辑[^2]。 #### 处理并发请求 如果需要同时发出多个异步请求,并等待它们全部完成后才执行下一步动作,可借助于 `Promise.all()` 函数来实现这一点: ```javascript function getUserAccount() { return axios.get('/user/account'); } function getUserPermissions() { return axios.get('/user/permissions'); } Promise.all([getUserAccount(), getUserPermissions()]) .then((results) => { const accountInfo = results[0].data; const permissionList = results[1].data; // 继续其他业务逻辑... }).catch(err => { console.warn(`One of the requests failed ${err}`); }); ``` 这段例子说明了如何高效管理多条独立但关联的任务链路。 #### 拦截器的应用 通过定义自定义中间件函数作为拦截处理器,能够在每次发送请求前后及接收到服务器回应之后实施特定行为,例如统一添加认证令牌至头部字段或是集中捕获异常状况: ```javascript // 添加请求拦截器 axios.interceptors.request.use(config => { config.headers['Authorization'] = localStorage.getItem('token'); // 将 token 放入 header 中 return config; }, error => { return Promise.reject(error); }); // 添加响应拦截器 axios.interceptors.response.use(response => response, error => { if (!error.response || !error.response.data){ alert("连接不上服务器"); return Promise.reject(error); } switch (error.response.status) { case 401: window.location.href="/login"; break; default: return Promise.reject(error); } }); ``` 此部分强调了增强应用程序健壮性的策略之一——合理运用拦截机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值