uni-app封装http请求方法

1.微信小程序平台配置合法域名

在这里插入图片描述

2.封装http请求

注意项
  • 在 uni-app 中,通常不需要单独安装或引入额外的 AJAX 库来进行网络请求,因为 uni-app 已经内置了网络请求的功能,并提供了 uni.request 方法来发送 HTTP 请求。这个方法可以发送各种类型的请求,如 GET、POST 等,并支持 Promise 形式的异步操作。
  • 在 uni-app 中封装好的 HTTP 请求库通常不需要在 main.js 文件中单独引入,因为 uni-app 的请求库可以在任何组件或文件中直接使用,无需在入口文件中额外引入。
  • 在 uni-app 中,通常不需要在 vue.config.js 中配置 devServer 的代理,因为 uni-app 是基于 Vue 的跨平台应用框架,而不是基于 Vue CLI 的单页面应用项目。在 uni-app 中,通常会在后端服务器端进行跨域配置,而不是在前端项目中配置代理
封装http
import store rom '@/store'

export const  httpRequest=()=>{
    // 配置请求地址,根据环境变量区分
    uni.$u.http.setConfig(config=>{
        config.baseURL = process.env.NODE_ENV === 'development' ? 'url地址' : '/';
        return config
    })

    // 请求拦截,接口请求前添加token
    uni.$u.http.interceptors.request.use((config) => { // 可以在这里自定义一些请求之前的操作
        // 商户id,根据公司接口规定配置
        let merchant_id = ""
        if(config.data) {
            config.data = { 
                ...config.data,
                merchant_id
            }
        } else {
            config.data = { merchant_id }
        }
        // 获取token
        const { authorization } = store.getters
        // // 判断是否有token,如果有,则设置请求头
        if(authorization) {
            // 设置请求头,携带token
            config.header.authorization = authorization
        }
        return config // 可以在这里返回修改后的config
    },config=>{
        return Promise.reject(config)// 返回一个Promise.reject() 在请求错误时拦截
    })
    
    // 响应拦截,接口返回结果后添加一些自定义操作,如登录过期操作,保存token等
    uni.$u.http.interceptors.response.use((response) => { 
        const { data, header, config } = response
        // 将token存储到vuex中
        if(header.authorization){
            store.commit('setToken', header.authorization)
        }
        // 判断返回值,判断是否提示调用成功
        if(config.custom.toastMsg === true) {
            uni.showToast({ title: data.msg, icon: 'none', duration: 2000 })
        }
        // 根据返回状态,判断一些操作
        if(data.code === 404){
            // 跳转到404页面
            uni.navigateTo({
                url: '/subPages/login/index'
            });
        }else if(data.code === '登录过期'){
            // 1.清除token
            store.commit('setToken', '')
            // 2.清除购物车
            store.dispatch('cart/secedeUpdataCart')
            // 3.跳转到登录页面
            uni.redirectTo({ url: '/subPages/login/index' })
            return 
        }else{
            // 登录失败
            uni.navigateTo({
                url: '/subPages/login/index'
            });
        }
        // 接口成功调用,返回数据data
        return data.data
    },err=>{
        // 判断是否有错误信息
        if (error.message ?? error.msg !== ERROR_MESSAGE_NO_TOKEN) {
            uni.showToast({ title: error.message ?? error.msg, icon: 'none' })
        }
        throw err
    })
}

3.定义api文件

  • 创建api文件夹,在index.js文件里引入接口
// 引入httpRequest方法
import {httpRequest}  from '../utils/http.js'
httpRequest()
export * from './card.js'
  • 定义接口方法,创建card.js文件
export function getOnSaleCard (page, id, limit = 10) {
    console.log('接口调用')
    return uni.$u.http.post('/takeOut/marketCard/getCardList', { page, limit, card_cate_id: id })
  }

4.在页面调用接口

<template>
	<view>
		<u-button @click="getList" type="primary">可售卡</u-button>
	</view>
</template>

<script>
import { getOnSaleCard } from '@/api/index'

export default {
	methods: {
		async getList (page = 1, id) {
			uni.showLoading({ title: '加载中' })
			// 调用方法
			await getOnSaleCard(page, id=1)
			uni.hideLoading()
		},
	}
}
</script>
Uni-app 是一个跨平台的开发框架,可以用于同时开发多个平台的应用程序。在 Uni-app 中进行网络求时,可以使用封装的方式来简化求过程,提高代码的复用性和可维护性。 以下是一个简单的示例,展示了如何封装一个网络方法: ```javascript // api.js // 导入uni-app网络方法 import { request } from 'uni-app'; // 封装网络方法 export function get(url, data) { return request({ url: url, method: 'GET', data: data }); } export function post(url, data) { return request({ url: url, method: 'POST', data: data }); } ``` 在上述示例中,我们将 uni-app 提供的 `request` 方法进行了封装,创建了 `get` 和 `post` 方法,分别用于发起 GET 和 POST 求。这样做的好处是可以统一处理求的配置,例如设置求头、处理响应等。 使用封装网络方法时,只需在需要发送求的地方引入 `api.js` 文件,并调用相应的方法即可: ```javascript // 使用网络方法 import { get, post } from './api.js'; // 发起 GET 求 get('/api/data', { id: 1 }) .then(response => { console.log(response.data); }) .catch(error => { console.error(error); }); // 发起 POST 求 post('/api/login', { username: 'admin', password: '123456' }) .then(response => { console.log(response.data); }) .catch(error => { console.error(error); }); ``` 通过封装网络方法,我们可以更方便地调用和管理网络求,提高开发效率。当需要修改求配置时,只需要在封装方法中进行修改,而不需要在每个求的地方都修改一遍。同时,封装后的代码也更易读、易维护。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值