前端uniapp封装网络请求详情教程

这篇具有很好参考价值的文章主要介绍了前端uniapp封装网络请求详情教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1,common文件夹下http.api.js,定义接口

const install = (Vue, vm) => {
    //验证码登陆
    let mobilelogin = (params = {}) => vm.$u.http.post('api/user/mobilelogin', params);
   // 将各个定义的接口名称,统一放进对象挂载到vm.$u.http.api(因为vm就是this,也即this.$u.http.api)下
    vm.$u.api = {
        mobilelogin,
    };
}

export default {
    install
}

2,common文件夹下http.interceptor.js,请求封装

// 此vm参数为页面的实例,可以通过它引用vuex中的变量
import Vue from 'vue'
module.exports = (vm) => {
	// 初始化请求配置
	uni.$u.http.setConfig((config) => {
		/* config 为默认全局配置*/
		config.baseURL = 'xxxxxxx'; /* 根域名 */
		config.header = {
			'content-type': 'application/x-www-form-urlencoded;charset=UTF-8',
		}

		return config
	})

	// 请求拦截
	uni.$u.http.interceptors.request.use((config) => {
		config.header.token = Vue.prototype.$store.state.member.token

		config.header.lang = Vue.prototype.$store.state.lang;

		console.log(config, 'config');

		return config
	})

	// 响应拦截

	uni.$u.http.interceptors.response.use((res) => {

		console.log(res, '成功')
		if (res.statusCode == 200) {
			// res为服务端返回值,可能有code,result等字段
			// 这里对res.result进行返回,将会在this.$u.post(url).then(res => {})的then回调中的res的到
			// 如果配置了originalData为true,请留意这里的返回值
			console.log(res.hasOwnProperty('data'));
			if (res.hasOwnProperty('data')) {
				if (res.data.hasOwnProperty('code') && res.data.code == 1) {
					if (res.data.msg != "" && res.data.msg != "success" && res.data.msg != 'ok') {
						uni.$u.toast(res.data.msg)
						// return res.data.data;
					}
					return res.data.data;
				} else {
					uni.$u.toast(res);
					if (res.data.hasOwnProperty('msg')) {
						uni.$u.toast(res.data.msg);

					} else {
						console.log(res);
						uni.$u.toast('返回参数错误', res);
					}
					return false;
				}
			} else {
				uni.$u.toast('不能识别数据1')

				return false;
			}
		}
		return res
	}, (res1) => {
		/*  对响应错误做点什么 (statusCode !== 200)*/
		console.log(res1, '失败')
		if (res1.statusCode == 401) {
			// 假设401为token失效,这里跳转登录
			uni.$u.toast('请登录后操作');
			console.log(Vue.prototype.$store, 'Vue.prototype.$store');
			Vue.prototype.$store.commit('SET_MEMBER', {})

			setTimeout(() => {
				// 此为uView的方法,详见路由相关文档
				uni.$u.route({
					url: '/pages/login/login',

				})

			}, 1500)
			return res1.data;
		} else {
			uni.$u.toast('不能识别数据2');
			// 如果返回false,则会调用Promise的reject回调,
			// 并将进入this.$u.post(url).then().catch(res=>{})的catch回调中,res为服务端的返回值
			return false;
		}
		return Promise.reject(res)
	})




}

3,全局数据定义 store文件夹下index.js

import Vue from 'vue'
import Vuex from 'vuex'

import createPersistedState from 'vuex-persistedstate'

Vue.use(Vuex)

const store = new Vuex.Store({
	plugins: [  
	    // 可以有多个持久化实例  
	    createPersistedState({  
	      key: 'app_config_data',  // 状态保存到本地的 key   
	      paths: ['member', 'cookieKey'],  // 要持久化的状态,在state里面取,如果有嵌套,可以  a.b.c   
	      storage: {  // 存储方式定义  
	        getItem: (key) => uni.getStorageSync(key), // 获取  
	        setItem: (key, value) => uni.setStorageSync(key, value), // 存储  
	        removeItem: (key) => uni.removeStorageSync(key) // 删除  
	      }  
	    })  
	],  
	state: {
		store: {},
		cart: [],
		orderType: 'takein',
		address: {},
		addresses: [],
		
		member: {
			// avatar: "http://cdn.shop.weivee.com/shop/20200408/6162b21922f336ae9b320bc06582ab7f.png",
			// birthday: null,
			// couponNum: 0,
			// currentValue: "1.00",
			// gender: 0,
			// id: 2,
			// level: 1,
			// mobile: "15975073045",
			// money: "4789.20",
			// openid: "oEY7Y5XYukLQySoKA7sPGWSDtktA",
			// score: 0,
			// token: "cb3136ea-97d3-42d3-a676-15ed170fa725",
			// token: "",
			// username: "游客"
		},
		openid:"",
		lang: 'zh-cn',
		cookieKey:'PHPSESSID=e4dk4o2utr3c0n95tp42p745ai',
		// 默认地为你为北京地址
		location: {},
		tableNumber:''
	},
	getters: {
		isLogin: state => Object.keys(state.member).length > 0	//是否登录
	},
	mutations: {
		SET_ORDER_TYPE(state, type) {
			state.orderType = type
		},
		SET_MEMBER(state, member) {
			state.member = member
		},
		SET_ADDRESS(state, address) {
			state.address = address
		},
		SET_ADDRESSES(state, addresses) {
			state.addresses = addresses
		},
		SET_STORE(state, store) {
			state.store = store
		},
		SET_CART(state, cart) {
			state.cart = cart
		},
		REMOVE_CART(state) {
			state.cart = []
		},
		setCookie(state, provider) {
			state.cookie = provider;
			uni.setStorage({
				key: 'cookieKey',
				data: provider
			});
		},
		SET_LOCATION(state, location) {
			state.location = location;
		},
		SET_OPENID(state, openid) {
			state.openid = openid;
		},
		SET_TABLE_NUMBER(state, tableNumber) {
			state.tableNumber = tableNumber
		},
	},
	actions: {
		
	}
})

export default store

注意:vuex的使用前要先导入vuex(npm i vuex),在该方法中还需导入vuex-persistedstate(npm i vuex-persistedstate)

uni.$u.http,前端,前端,uni-app,网络

4,main.js中声明(例子中用的比较杂,挑有用的使用)

import App from './App'

import store from './store'
// #ifndef VUE3
import Vue from 'vue'

Vue.config.productionTip = false
// console.log(Vue.prototype.$store);
Vue.prototype.$store = store
console.log(Vue.prototype.$store);

App.mpType = 'app'
// main.js
import uView from "uview-ui";
Vue.use(uView);
const app = new Vue({
	store,
	...App
})

// http拦截器,将此部分放在new Vue()和app.$mount()之间,才能App.vue中正常使用
import httpInterceptor from '@/common/http.interceptor.js'
Vue.use(httpInterceptor, app)

// http接口API集中管理引入部分
import httpApi from '@/common/http.api.js'
Vue.use(httpApi, app)


Vue.prototype.$store = store
console.log(Vue.prototype.$store);
Vue.prototype.$util = util
Vue.prototype.$baseUrl = 'xxxx'//根域名
app.$mount()
// #endif

// #ifdef VUE3
import {
	createSSRApp
} from 'vue'
export function createApp() {
	const app = createSSRApp(App)
	return {
		app
	}
}
// #endif

5,接下来就是在页面中发实际应用了

let data = await this.$u.api.mobilelogin({
//所传参数
						mobile: _this.tel,
						captcha: _this.code,
						type: 1
					});
					console.log(data, 'data');

这里输出的data 与common文件夹下http.interceptor.js的配置有关,我这里直接获取的是网络请求中data.data的数据

uni.$u.http,前端,前端,uni-app,网络

以上是网络请求的逻辑说明以及部分代码,关于vuex的详细使用下篇文章详细说明文章来源地址https://www.toymoban.com/news/detail-781310.html

到了这里,关于前端uniapp封装网络请求详情教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【uniapp】小程序开发:2 安装uni-ui组件库、使用pinia状态管理、自定义http请求

    1、安装 2、配置组件自动导入 使用 npm 安装好 uni-ui 之后,需要配置 easycom 规则,让 npm 安装的组件支持 easycom 打开项目根目录下的 pages.json 并添加 easycom 节点: 3、安装插件,实现uni-ui组件的类型提示 安装完成后,在 tsconfig.json 中增加配置项 4、测试使用 随便复制一个组件在

    2024年02月08日
    浏览(61)
  • uniapp及微信小程序封装全局网络请求,弹框和hint提示

    今天分享一下uniapp项目的网络请求如何封装,不知道大家开发微信小程序项目是用什么开发工具,我个人更喜欢用uniapp,无论是从项目扩展方向还是开发效率来说,uniapp都是首选。 1:创建一个项目工具库,http.js 在vite.config.js文件中配置跨域 这样,一个全局网络请求工具就完

    2024年02月06日
    浏览(43)
  • 详细教程 - 从零开发 Vue 鸿蒙harmonyOS应用 第五节 (基于uni-app封装鸿蒙接口请求库)

      随着鸿蒙系统的兴起,越来越多的app会采用鸿蒙开发。而鸿蒙开发必不可少的就是调用各种接口服务。为了简化接口的调用流程,我们通常会做一层封装。今天就来讲解一下,如何用uni-app封装鸿蒙的接口请求库。   首先我们要新建一个鸿蒙项目啦!当然选择第一个空白项

    2024年02月02日
    浏览(63)
  • uniapp微信小程序封装网络请求 @escook/request-miniprogram

    官网地址:https://www.npmjs.com/package/@escook/request-miniprogram 1、下载依赖 2、引入 把下面代码放到 main.js 3、发起请求 4、请求成功 可以看到请求成功了,并执行了登入成功的逻辑。 每次发起请求后,都要自己写if语句判断请求是否成功,非常麻烦。我们可以修改一下源码解决这个

    2024年02月10日
    浏览(48)
  • uniapp封装一个网络请求的服务,包括拦截器,请求头等,适用于抖音小程序,各种小程序。

    今天用uniapp写抖音小程序的时候,发现抖音小程序不支持axios(也许是我不会玩哈),那使用uniapp提供的请求方式总是可以的,毕竟uniapp对于小程序的友好度那是真没的说呀。那每个请求都写一套请求代码也太麻烦了,封装一个服务吧。直接上代码,我们把下面这个文件叫做

    2024年02月07日
    浏览(47)
  • uniapp小程序:使用uni.getLocation通过腾讯地图获取相关地址信息详情(超详细)

    先看运行结果: 流程: 搜索后点击这里 已经有账号的就进行登录,没有账号的进行注册即可 点击控制台: 进去后点击成员管理----我的应用----创建应用 输入相应的参数应用名称(随便写)和应用类型更具你的项目类型进行选择我选择了出行 选择好后点击创建: 创建好后点

    2024年04月25日
    浏览(57)
  • uni-app 使用uni.request封装发送api请求文档服务器请求导航守卫

    前言 刚刚接触uni-app时候想着直接使用axios发请求,可以发送成功但是请求头有点问题 后面发现教程都是使用@escookrequest-miniprogram三方包发送请求-(浏览器环境发送不了请求,不兼容) 为什么不直接用uni.request()发送请求,是因为每次请求都要写一次添加请求头不合理 后面

    2024年02月16日
    浏览(57)
  • uni-app封装的request请求

    config.js    main.js 页面使用:

    2024年02月12日
    浏览(37)
  • 【uniapp&微信小程序】封装uni.request()

    前言         在项目开发过程中,往往需要对请求进行二次封装,这篇文章将对uni.request()进行二次封装,并实现多个环境的请求配置,对请求方式,数据格式等进行封装,将请求做到最简化。 一.封装uni.request() 第一步基于 uni.request() 进行二次封装,集成项目开发中需要的参

    2024年02月09日
    浏览(91)
  • uniapp uni.requet()二次封装ts版

    uni-app网络请求 uni-app题拱了uni.requet()方法,发起网络请求 uni.request请求的封装 src文件夹下创建utils文件夹,再创建request.ts文件,用于封装请求,使用promise封装  在src文件夹下创建api文件夹,将前端所有的请求文件都放在里面 例如在api文件夹下创建home.ts文件  在vue文件中使用

    2024年02月12日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包