Vue3项目,axios封装接口api,请求 + 获取数据出错

3 篇文章 0 订阅
2 篇文章 0 订阅

请求数据:使用axios发送请求时携带参数,假如参数传入为对象则请求出错,传入为字符串(例如:变量=数值)才能请求成功

获取数据:返回数据为promise时,获取[[PromiseResult]]里面的数据

封装接口

api目录下建立http.jsapiUrl.js,这两个文件发起请求必备的

http.js:用于创建axios实例,便于统一管理请求对象

apiUrl.js:项目所有接口都放在这里

api目录结构:

 

 

组件的请求过程封装成*API.js文件统一放在api文件夹下

这样的做法便于管理接口修改接口地址改apiUrl.js修改请求过程修改*API.js

http.js

import axios from "axios"
​
export default axios.create({
    // 服务接口基本地址
    baseURL: 'http://localhost:9000',
    // 超时时间
    timeout: 1500,
    // 超时错误信息
    timeoutErrorMessage: '请求超时'
})

apiUrl.js

// 所有接口配置,便于后期管理
​
export default {
    getAllLogin: '/getAllLogin.ac',
    
    
    ...
}

请求数据(解决传参问题)

//qs 是一个增加了一些安全性的查询字符串解析和序列化字符串的库
import qs from "qs"
​
//axios请求数据,直接传入对象不会自动转换类型
//使用qs库的这个方法可以把对象方法解析解析成字符串再传递给axios
qs.parse()是将URL解析成对象的形式
qs.stringify()是将对象序列化成URL的形式,以&进行拼接
​
​
例如:
let msg = {
    username: "test",
    password: "000000"
}
qs.stringify(msg)
​
最终结果被解析为 ==>   username=test&password=000000

获取数据(解决从封装api方法 获取 服务端响应的数据)

核心代码

==封装api方法(``*API.js``) —— 返回响应数据给组件==

response => {
    // 返回服务端响应数据给组件
    return response.data
}
==组件setup(),调用封装api方法==

//调用封装api后,需要调用then(),在里面获取返回值
//==============这个获取到的才是服务端响应的数据===============
getMiniInfoCard(apiUrl.getInfoByUserNameUrl,data).then(
    (response)=> {
        miniInfoCards.value = response.data
    }
);



//假如直接调用api获取数据得到的是一个promise对象
getMiniInfoCard(apiUrl.getInfoByUserNameUrl,data)

*API.js

import http from "./http"
import {ElMessage} from "element-plus"
​
//qs 是一个增加了一些安全性的查询字符串解析和序列化字符串的库
import qs from "qs"
​
// 获取数据:miniInfoCard
const getMiniInfoCard = (url,data)=> {
    return http.post(url,qs.stringify(data)).then(
        response => {
            return response.data
        },
        error => {
            ElMessage({
                type: "error",
                message: error.message,
                showClose: true
            })
        }
    )
}
​
export default getMiniInfoCard

组件

export default {
    setup() {
        let miniInfoCards = ref([])
​
        let data = {
            username: 'admin'
        }
​
        // 获取数据: miniInfoCard
        getMiniInfoCard(apiUrl.getInfoByUserNameUrl,data).then(
            (response)=> {
                miniInfoCards.value = response.data
            }
        );
​
        return {
            miniInfoCards,
        }
    }
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Vue 2 中,可以使用 Axios 库来封装网络请求。以下是一种将请求接口地址和方法分开的页面的封装方法: 1. 首先,创建一个 `api.js` 文件,用于存放所有的接口地址和请求方法,例如: ```javascript import axios from 'axios' // 定义接口地址 const BASE_URL = 'https://api.example.com' // 封装 GET 请求方法 export function getRequest (url, params) { return axios.get(`${BASE_URL}${url}`, { params }) } // 封装 POST 请求方法 export function postRequest (url, data) { return axios.post(`${BASE_URL}${url}`, data) } // 封装 PUT 请求方法 export function putRequest (url, data) { return axios.put(`${BASE_URL}${url}`, data) } // 封装 DELETE 请求方法 export function deleteRequest (url) { return axios.delete(`${BASE_URL}${url}`) } ``` 2. 在需要调用接口的页面中,引入 `api.js` 文件,并调用其中的请求方法,例如: ```javascript import { getRequest, postRequest } from '@/api.js' // 调用 GET 请求方法 getRequest('/users', { page: 1 }) .then(response => { console.log(response.data) }) .catch(error => { console.error(error) }) // 调用 POST 请求方法 postRequest('/login', { username: 'admin', password: '123456' }) .then(response => { console.log(response.data) }) .catch(error => { console.error(error) }) ``` 这样,就可以将请求接口地址和方法分开,便于管理和维护。 ### 回答2: 在Vue2中,我们可以使用axios来发送HTTP请求,并且可以通过封装请求接口方法,将请求接口地址和方法分开到不同的页面中,提高代码的可读性和维护性。 首先,在项目中导入axios和相关依赖。可以通过npm或者CDN的方式导入axiosVue相关的库。 接下来,创建一个util文件夹,并在该文件夹中创建一个api.js文件,用于封装请求接口方法。 在api.js文件中,我们可以定义一个对象,用来存储各个接口请求方法。 ```javascript // api.js import axios from 'axios'; const api = { getUserInfo() { return axios.get('/api/user'); }, login(params) { return axios.post('/api/login', params); }, logout() { return axios.get('/api/logout'); }, // 其他接口... }; export default api; ``` 在以上代码中,我们定义了一个api对象,该对象包含了getUserInfo、login、logout等接口请求方法。这些方法通过axios发送HTTP请求,并返回一个Promise对象。 接下来,在需要使用接口的页面中,可以通过import语句引入api.js文件,从而可以调用相应的接口方法。 ```javascript // Home.vue import api from '@/utils/api'; export default { name: 'Home', mounted() { this.getUser(); }, methods: { getUser() { api.getUserInfo() .then(response => { console.log(response.data); }) .catch(error => { console.log(error); }); }, // 其他方法... } } ``` 以上代码是一个Home页面的示例,通过引入api.js文件,并调用getUserInfo接口方法,获取用户信息。在then回调中,我们可以处理返回的数据。在catch回调中,我们可以处理请求出错的情况。 通过将请求接口地址和方法分开到不同的页面,我们可以使代码结构更加清晰,易于维护和管理。同时,可以在api.js文件中统一处理请求的错误信息和请求的统一配置,增加灵活性。 ### 回答3: 在Vue2中使用axios封装请求接口方法,可以将请求接口地址和方法分开到不同的页面。 首先,创建一个名为api.js的文件,用于集中管理所有的接口地址,例如: ```javascript // api.js const baseURL = 'http://api.example.com'; // 设置接口的基础地址 export default { login: baseURL + '/login', // 登录接口 getUserInfo: baseURL + '/getUserInfo', // 获取用户信息接口 // 其他接口... } ``` 接下来,创建一个名为request.js的文件,用于统一封装axios请求方法,例如: ```javascript // request.js import axios from 'axios'; axios.defaults.timeout = 5000; // 设置请求超时时间 export default function request(url, method, data) { return new Promise((resolve, reject) => { axios({ url, method, data }).then(res => { resolve(res.data); }).catch(error => { reject(error); }); }); } ``` 最后,在需要发送请求的组件中,引入api.js和request.js,并调用请求方法,例如: ```javascript // MyComponent.vue import api from './api.js'; import request from './request.js'; export default { methods: { login() { request(api.login, 'post', { // 调用登录接口 username: 'admin', password: '123456' }).then(res => { console.log('登录成功:', res); }).catch(error => { console.log('登录失败:', error); }); }, getUserInfo() { request(api.getUserInfo, 'get') // 调用获取用户信息接口 .then(res => { console.log('获取用户信息成功:', res); }).catch(error => { console.log('获取用户信息失败:', error); }); }, // 其他请求方法... } } ``` 这样,我们将请求接口地址和方法都分开到不同的页面中,使代码更加清晰和可维护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值