vue 配置axios 封装接口

本文介绍了在Vue项目中配置Axios的方法。首先使用npm安装Axios,接着在src/utils/request.js设置请求头、拦截器,在src/utils/http.js导入封装实例,在src/api/api.js封装请求接口。还可在根目录下的vue.config.js进行配置,也能将其挂载到prototype。

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

使用npm安装axios

npm install axios

src/utils/request.js 请求头 ,请求拦截器,响应拦截器

import axios from 'axios'
const service = axios.create({
    baseURL: process.env.BASE_API,
    timeout: 3 * 1000
})
service.interceptors.request.use(config => {
    config.data = JSON.stringify(config.data);
    config.headers = {
        // 'Content-Type': 'application/x-www-form-urlencoded' //配置请求头
        'Content-Type': 'application/json;charset=UTF-8' //配置请求头
    }
    return config
}, error => {
    Promise.reject(error)
})
//4.导入文件
export default service

src/utils/http.js 导入封装好的axios实例

// 导入封装好的axios实例
import request from './request'

const http = {
    /**
     * methods: 请求
     * @param url 请求地址 
     * @param params 请求参数
     */
    get(url, params) {
        const config = {
            method: 'get',
            url: url
        }
        if (params) config.params = params
        return request(config)
    },
    post(url, params) {
        const config = {
            method: 'post',
            url: url
        }
        if (params) config.data = params
        return request(config)
    },
    put(url, params) {
        const config = {
            method: 'put',
            url: url
        }
        if (params) config.params = params
        return request(config)
    },
    delete(url, params) {
        const config = {
            method: 'delete',
            url: url
        }
        if (params) config.params = params
        return request(config)
    }
}
//导出
export default http

src/api/api.js 这里就是所有封装的请求接口。可以根据自己的 地址去自己写。再自定义个方法名。这样用的时候直接导入api.js文件即可

import http from '../utils/http'
/**
 *  @parms resquest 请求地址 例如:http://197.82.15.15:8088/request/...
 *  @param '/testIp'代表vue-cil中config,index.js中配置的代理
 */
let resquest = "http://xxx.xxx.xxx.xxx:8090/api"  //xxx的地方是后端ip

// 通过姓名获取员工信息
export function racerNameTabelAPI(params) {
    return http.get(`${resquest}/racer/name`, params)
}
//通过姓名获取员工信息
export function racerQueryTabelAPI(params) {
    return http.get(`${resquest}/racer/query`, params)
}
//修改员工信息
export function racerUpdateAPI(params) {
    return http.post(`${resquest}/racer/update`, params)
}
//查询队长姓名对应的队伍资料
export function leaderTabelAPI(params) {
    return http.get(`${resquest}/team/leader`, params)
}
//查询队员姓名对应的队伍资料
export function mateTabelAPI(params) {
    return http.get(`${resquest}/team/mate`, params)
}
//修改队伍资料
export function teamUpdateAPI(params) {
    return http.post(`${resquest}/team/team/update`, params)
}
//导入   或者 import api from '@/api/api' 使用  api.racerNameTabelAPI().then()
import {
  racerNameTabelAPI,
  racerQueryTabelAPI,
  racerUpdateAPI,
  leaderTabelAPI,
  mateTabelAPI,
  teamUpdateAPI
} from '@/api/api'
//这是调用的方法
    teamTrueHandle() {
      let objTemp = {
        status: this.SelectValue
      }
      let obj = Object.assign(this.teamTeap, objTemp)
      teamUpdateAPI(obj).then(res => {
        if (res.data.resultCode == 0) {
          this.teamTableData = res.data.data
          this.$message.success('成功')
        } else {
          this.$message.error('异常')
        }
      })
    }

根目录下 vue.config.js 没有可以手动建

//proxy是处理跨域的
module.exports = {
    devServer: {
        host: '0.0.0.0', // 允许外部ip访问
        port: 8080, // 端口
        https: false, // 启用https
        proxy: {
            '/api': {
                target: 'http://xxx.xxx.xxx.xxx:8090',  
                changeOrigin: true,
                secure: false,
                pathRewrite: {
                    '^/api': '/api'
                }
            }
        }
    }
}

配置axios有还有很多方法 还可以直接挂在到prototype

//main.js
import axios from 'axios'
Vue.prototype.$http = axios  //使用就 this.$http.get(url,{params:参数})

这样就配置好了。不明白也可以从头再看几遍。实战项目亲测

<think>我们参考用户提供的引用资料,用户意图是封装一个用于添加(add)接口axios方法。根据引用资料,常见的封装方式包括: 1. 在Vue原型上添加方法(如引用[1]) 2. 使用单独的模块封装axios,然后导出方法(如引用[4]) 考虑到模块化和可维护性,我们采用单独封装axios的方式,然后导出一个用于add请求的方法。 步骤: 1. 创建一个axios实例,并配置基础URL、请求头等。 2. 封装一个通用的请求函数,可以处理不同类型的请求(GET, POST, PUT, DELETE等)。 3. 封装一个专门用于添加(通常对应POST请求)的方法,该方法调用通用请求函数,传入POST方法和相应的参数。 根据引用[4]的示例,我们可以封装一个http函数,然后基于这个函数封装具体的接口方法(如modifyPositionDefinition)。对于add接口,我们通常使用POST方法。 因此,我们可以这样实现: 首先,创建一个axios实例(比如在utils/request.js中): ```javascript import axios from 'axios' // 创建axios实例 const instance = axios.create({ baseURL: 'http://api.example.com', // 根据实际情况设置基础URL timeout: 5000, // 请求超时时间 headers: { 'Content-Type': 'application/json' } }) // 请求拦截器 instance.interceptors.request.use( config => { // 在发送请求之前可以做一些处理,例如添加token // config.headers.Authorization = `Bearer ${token}` return config }, error => { return Promise.reject(error) } ) // 响应拦截器 instance.interceptors.response.use( response => { // 对响应数据做处理,例如只返回data部分 return response.data }, error => { // 对响应错误做处理 return Promise.reject(error) } ) export default instance ``` 然后,我们可以封装一个http函数(或者直接使用上述实例,但为了更灵活,我们可以封装一个函数): 但是,根据引用[4]的方式,我们可以封装一个http函数,它接收一个配置对象和参数。 不过,我们也可以参考另一种方式:封装具体的请求方法(如get, post, put, delete)到一个对象中,然后导出这些方法。 这里,我们采用直接封装一个http函数的方式,类似于引用[4]中的做法,但稍作调整。 在http.js中: ```javascript import instance from './request' // 导入上面创建的axios实例 /** * 封装http请求函数 * @param {Object} options 请求配置 * options.url: 请求地址 * options.method: 请求方法,默认为GET * ... 其他配置 * @param {Object} params 请求参数,包括路径参数、查询参数、请求体数据等,根据请求方法不同放置位置不同 * - 对于GET请求,参数通常放在params字段(即查询参数) * - 对于POST、PUT等请求,参数通常放在data字段(即请求体) * 注意:这里为了简化,我们统一使用一个参数对象,然后在内部根据请求方法处理 * 但更常见的做法是调用者明确知道传参的位置,所以我们可以要求调用者将参数分别放在options.params(查询参数)和options.data(请求体)中。 * 或者,我们可以这样设计:options中配置method,然后在调用http函数时,第二个参数是data(请求体),第三个参数是params(查询参数)。 * 但为了简单,我们参考axios配置,直接使用一个config对象,将所有的配置都放在options中,包括url, method, params(查询参数), data(请求体)等。 * 这样我们就可以直接使用instance(options)来发送请求。 * 因此,我们不需要第二个参数params,而是将所有配置都放在options中。 */ function http(options) { return instance(options) } export default http ``` 但是,用户需要封装一个add接口方法,所以我们可以进一步封装具体的add方法。例如,在api目录下创建一个user.js(假设是用户相关的接口): ```javascript import http from '@/utils/http' // 导入封装好的http函数 /** * 添加用户 * @param {Object} userData 用户数据对象 * @returns {Promise} 返回一个Promise对象 */ export function addUser(userData) { return http({ url: '/user/add', method: 'post', data: userData // 将userData作为请求体发送 }) } ``` 这样,在组件中就可以使用这个方法: ```javascript import { addUser } from '@/api/user' export default { methods: { async submitForm() { try { const userData = { name: 'John', age: 30 } const result = await addUser(userData) console.log('添加成功', result) } catch (error) { console.error('添加失败', error) } } } } ``` 另外,根据引用[1]的方式,我们也可以在Vue原型上挂载$post方法,然后在组件中直接使用this.$post(url, data)来发送POST请求。但是这种方式没有将接口统一管理,不利于维护。 因此,推荐使用单独封装接口模块的方式。 总结:封装一个添加(add)接口的方法,通常需要以下步骤: 1. 创建并配置axios实例(设置基础URL、拦截器等)。 2. 封装一个http函数(可选,也可以直接使用实例,但封装函数可以更灵活)。 3. 在具体的接口模块中,使用http函数(或实例)发送POST请求,并返回Promise。 4. 在组件中引入具体的接口方法,调用并处理结果。 注意:根据引用[4]的示例,他们封装了具体的接口函数(如modifyPositionDefinition),并使用了PUT方法。对于add,我们使用POST方法。 所以,针对用户的问题,我们可以这样回答:</think>### Vue 封装 Axios 添加(Add)接口方法 在 Vue封装 Axios 的添加(Add)接口方法,通常需要以下步骤: #### 1. **创建 Axios 封装文件** 在 `src/utils/request.js` 中封装基础 Axios 实例: ```javascript import axios from 'axios' // 创建实例 const service = axios.create({ baseURL: 'https://your-api-base-url.com', // 替换为实际 API 地址 timeout: 10000, headers: { 'Content-Type': 'application/json' } }) // 请求拦截器 service.interceptors.request.use(config => { // 可添加 token 等全局参数 // config.headers.Authorization = localStorage.getItem('token') return config }) // 响应拦截器 service.interceptors.response.use( response => response.data, // 直接返回数据体 error => { // 统一错误处理 console.error('API Error:', error.response) return Promise.reject(error) } ) export default service ``` #### 2. **封装添加(Add)接口方法** 在 `src/api/user.js` 中创建具体添加接口: ```javascript import request from '@/utils/request' /** * 添加用户接口 * @param {Object} userData - 用户数据对象 * @returns {Promise} */ export function addUser(userData) { return request({ url: '/users', // 替换为实际添加接口路径 method: 'post', data: userData // POST 请求体数据 }) } // 其他接口... ``` #### 3. **在 Vue 组件中使用** ```vue <script> import { addUser } from '@/api/user' export default { methods: { async submitForm() { try { const newUser = { name: this.name, email: this.email, role: 'member' } const response = await addUser(newUser) console.log('添加成功:', response) // 处理成功逻辑 } catch (error) { console.error('添加失败:', error) // 处理错误逻辑 } } } } </script> ``` #### 关键配置说明: 1. **请求方法**:添加操作使用 `POST` 方法 2. **数据传递**:通过 `data` 属性传递请求体 3. **Content-Type**:默认使用 `application/json` 4. **错误处理**:通过拦截器统一管理错误 5. **模块化**:按功能模块组织 API 文件(如 `user.js`、`product.js`) #### 最佳实践: - **参数验证**:在接口封装层添加基础验证 - **TypeScript 支持**(可选): ```typescript interface User { name: string; email: string; role?: string; } export function addUser(userData: User): Promise<Response> { // ... } ``` - **取消请求**:对耗时操作添加取消令牌 ```javascript import { CancelToken } from 'axios' const source = CancelToken.source() request({ cancelToken: source.token, // ... }) // 需要时调用 source.cancel() ``` [^1]: 在 Vue 原型上挂载全局请求方法,适合简单场景 [^2]: Vue+TS 项目中推荐使用模块化封装 [^3]: Axios 是基于 Promise 的 HTTP 库,支持统一管理请求 [^4]: 按功能模块组织 API 文件,提高可维护性 --- ### 相关问题 1. 如何为 Axios 封装添加请求取消功能? 2. Vue 中如何统一处理 Axios 的异常错误? 3. 在 TypeScript 项目中如何优化 Axios 封装? 4. 如何为 Axios 添加请求重试机制? 5. 不同环境(开发/生产)下如何动态配置 Axios 的 baseURL?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值