微信小程序request请求封装;微信小程序封装request请求;uni-app小程序封装request请求;

本片封装了微信小程序request请求;为别是post get put请求,重点在request.js文件

1.新增四个文件
在这里插入图片描述

2.根目录下的utils下的request.js封装uni.request()请求

2.1 manifest.json:解决H5浏览器跨域问题-----配置代理一定要重启项目
在这里插入图片描述

    // 自定义配置H5"h5": {"devServer": {"disableHostCheck": true, // 开启可以用自己的域名-----配置代理一定要重启项目-----配置代理一定要重启项目"proxy": {"/api": {"target": "https://www.zuihuibao.cn","changeOrigin": true,"secure": false,"pathRewrite": {//匹配请求路径里面有 /api 会替换成https://www.zuihuibao.cn// url: `/yiiapp/keduoduo/system/send-sms`, 会被代理带 https://www.zuihuibao.cn/yiiapp/keduoduo/system/send-sms"^/api": ""}}}}}

2.2utils文件的request.js:
注意 :需要根据自己接口的 statusCode 状态码 、数据状态码 return_code 和提示信息 return_message 做对应替换
—需要更改公共地址
—需要注意store的token获取
—需要注意 封装了get post put请求 需要其他的请求自行继续封装

—包含了针对某个特殊接口url 做特殊的错误提示(例如:settings.url.indexOf(‘system/ocr’)>=0)

import store from '../store'let baseUrl = ''
let isExisited = falseconst $https = {}switch (process.env.NODE_ENV) {case 'development':// 公共的地址开发--(为了兼容微信小程序和谷歌浏览器H5 故有以下两个  H5方便浏览器调试)/* #ifdef MP-WEIXIN */baseUrl = 'https://www.zuihuibao.cn/'/* #endif *//* #ifdef H5 */// 修改成如下判断是为了解决 编译H5浏览器跨域问题 同时需要配置manifest.json文件的H5baseUrl = process.env.NODE_ENV === 'development' ? '/api' : 'https://www.zuihuibao.com' // 将否的改成生产环境/* #endif */breakcase 'test':baseUrl = 'https://www.zuihuibao.cn/'breakcase 'production':baseUrl = 'https://www.zuihuibao.com/'breakdefault:baseUrl = 'https://www.zuihuibao.com/'
}
console.log('baseUrl', baseUrl,process.env.NODE_ENV)function httpRequest(settings, opts) {const { loading, hasToken, toast, checkToken } = optsconst hasUserInfo = store.getters.hasUserInfosettings.header['aaaa'] = 'aaaa'// if (hasToken !== false) {if (hasToken) {const token = uni.getStorageSync('token_key')// settings.header['Token'] = tokenlet headerName = uni.getStorageSync('login_cookie_name') || 'login_cookie_name'let headerValue = uni.getStorageSync('login_cookie_value')|| ''// let headerName = store.getters.login_cookie_name || 'login_cookie_value'// let headerValue = store.getters.login_cookie_value || 'login_cookie_value'// console.log('设置cookie', store.getters, headerName, headerValue)// 针对需要token的接口(是否需要看接口传参)  设置获取登录成功后的token  设置在header上settings.header['Cookie'] =`${headerName}=${headerValue}`// 根据是否有token的值 来判断登陆是否有效(需要token 但是缓存没有 就重定向到登录页) 退出时候清除tokenif (!headerValue) {// uni.showModal({//   title: '提示',//   content: '身份失效,请重新登录!',//   complete: () => {//     uni.reLaunch({ url: '/pages/tabBar/login/index' })//   },// })uni.reLaunch({ url: '/pages/tabBar/login/index' })return}}let showLoading = loading !== falseif (showLoading) uni.showLoading({ title: '加载中...', mask: true })return new Promise(function (resolve, reject) {uni.request({...settings,success: (res) => {const { statusCode, data } = resconsole.log('封装接口返回的res', statusCode, res)if (showLoading) uni.hideLoading()// 判断 statusCode 是否是200 查看接口调用是否成功switch (statusCode) {case 200:breakcase 500:// reject({ statusCode: 500, return_message: '服务器重启中...' })uni.showToast({title: data.return_message || '服务器重启中...',duration: 2000,icon: 'none',})returndefault:// reject({ statusCode: statusCode, return_message: '请求失败' })uni.showToast({title: data.return_message || '请求失败,请重试!',duration: 2000,icon: 'none',})return}//在接口200 调用成功后 才能进行判断接口内的状态码 return_code 以此判定作何操作和提示const result = res.dataswitch (result.return_code) {case '0':// 成功的数据data状态码  则直接返回数据// console.log(1111111,result);resolve(result)breakcase '-1004':// 针对识别的接口方法getocr system/ocr做了特殊的错误处理(需要用到这错误修改页面信息)if (settings.url.indexOf('system/ocr')>=0) {// console.log('settings',settings);// console.log('result',result);// 特定接口特定处理-在具体的组件返回的res判断处理resolve(result)} else {// 正常接口报错 继续提示showErrors(result)}breakcase '-1':// 这个是特殊的失败数据  需要接口返回特殊处理resolve(result)breakcase '-1000'://登录失效 清除所有缓存 退到登录页uni.clearStorage()if (hasUserInfo && !isExisited && !checkToken) {isExisited = trueuni.showModal({title: '提示',content: '身份失效,请重新登录!',complete: () => {uni.reLaunch({ url: '/pages/tabBar/login/index' })},})} else {reject(result)}breakdefault:reject(result)if (toast !== false) showErrors(result)}},fail: (res) => {// console.log('请求fail', res)if (showLoading) uni.hideLoading()uni.showToast({// title: '请求失败,请重试1122!',title: res.return_message || '请求失败,请重试!',duration: 2000,icon: 'none',})},})})
}function showErrors(res) {const { return_code, return_message } = resswitch (return_code) {case -1004:uni.showToast({title: return_message,duration: 2000,icon: 'none',})breakdefault:uni.showToast({title: return_message || '请求失败',duration: 2000,icon: 'none',})}
}function setParams(params) {let result = []for (let p in params) {result.push(`${p}=${params[p]}`)}return '?' + result.join('&')
}$https.get = function (opts) {const { params, data, toast, hasToken, loading, checkToken } = optsif (params) opts.url = opts.url + setParams(params)let defaultOpts = {url: baseUrl + opts.url,data: data,method: 'GET',header: {'X-Requested-With': 'XMLHttpRequest',Accept: 'application/json','Content-Type': 'application/json; charset=UTF-8',},dataType: 'json',}return httpRequest(defaultOpts, { loading, toast, hasToken, checkToken })
}$https.put = function (opts) {const { params, data, toast, hasToken, loading } = optsif (opts.params) opts.url = opts.url + setParams(opts.params)let defaultOpts = {url: baseUrl + opts.url,data: data,method: 'PUT',header: {'X-Requested-With': 'XMLHttpRequest',Accept: 'application/json','Content-Type': 'application/json; charset=UTF-8',},dataType: 'json',}return httpRequest(defaultOpts, { loading, toast, hasToken })
}$https.post = function (opts) {const { params, data, toast, hasToken, loading } = optsif (params) opts.url = opts.url + setParams(params)let defaultOpts = {url: baseUrl + opts.url,data: data,method: 'POST',header: {'X-Requested-With': 'XMLHttpRequest','Content-Type': 'application/json; charset=UTF-8',},dataType: 'json',}return httpRequest(defaultOpts, { loading, toast, hasToken })
}export { $https, baseUrl }

2.3.某个模块的接口请求方法api:

hasToken: false,既不需要token ;
params是url拼接传参;
loading:false,既不存在loading刷新提示(可以通过在api方法内写死,也可以通过vue页面的传参获取动态的);
data是正常传参

/*
// post两种请求 data和params// function query(data, params, opts) {
//     return $https.get({url, data, params, ...opts})
//     return $https.post({url, data, params, ...opts})
//   }
//   ```
//     url: 'main/work/list'
//     data为{}请求参数,
//     params为{},最后更改为url传参
//     默认情况下,接口会传token, 加载框会显示,请求失败信息toast会展示,
//     如需自定义,可以传入opts: {loading: false, hasToken: false, toast: true}
//     其中loading为false, 接口请求时不显示loading框
//     hasToken为false, 请求不需要带token
//     toast为false,请求失败不会显示系统toast//   ```
*/
import { $https } from '../../utils/request'// 根据手机号注册或登录
export function loginByMobile(params,loading) {return $https.post({url: 'yiiapp/keduoduo/system/login-by-mobile',params,hasToken: false,loading:loading == false ? false : true  //注意在vue页面传递第二个参数就是loading的值(同理hasToken也可以如此处理)})
}// 根据手机号注册或登录
export function customerList(params) {return $https.post({url: 'yiiapp/keduoduo/customer/customer-list',params,hasToken: true,})
}// 查看我的信息
export function getMyInfo(params) {return $https.post({url: 'yiiapp/keduoduo/user/my-info',params,hasToken: true,})
}// 提交报价申请
export function submitPriceRecord(params) {return $https.post({url: 'yiiapp/keduoduo/customer/submit-price-record',params,hasToken: true,})
}// 删除车辆
export function deleteCarInfo(params) {return $https.post({url: 'yiiapp/keduoduo/car-info/delete-car-info',params,hasToken: true,})
}// 直接get获取
export function getProductcategory() {return $https.get({url: `api/v1/accident/productcategory/list`,})
}
// get参数获取
export function getInsurancecompany(params) {return $https.get({url: `api/v1/accident/insurancecompany/list`,params,})
}
// post参数请求
export function postInsurance(data) {return $https.post({url: `api/v1/accident/insurance/list`,data,})
}

4.请求vue页面

<template><view><view>objData: {{objData}}</view><view style="margin-top:50px;">arrData:<view v-for="item in arrData" :key="item">{{item}}</view></view><!-- <button type="primary" @click="get">原生请求</button><button type="primary" @click="getType">封装后 async await获取</button><button type="primary" @click="postType">封装后 .then()获取</button> -->..<button type="primary" @click="get1">utils完全封装--直接get</button><button type="primary" @click="get2">utils完全封装--参数get</button><button type="primary" @click="post1">utils完全封装--post参数</button></view>
</template><script>
import { getProductcategory, getInsurancecompany, postInsurance } from "../api/modules";
export default {data() {return {value: 0,objData: {},arrData: []}},methods: {get() {uni.showLoading({title: '加载中...',mask: true,})uni.request({url: 'http://localhost:2222/yiiapp/order/list-all-web',data: {refund_status: 0,action: 'multiple_orders',order_type: 0,index: 0,limit: 10,status: 3,key: '',},header: {// 使用公众号的CookieCookie: '_uab_collina=162036568869229763220898; Hm_lvt_79ee0e9f63d4bd87c861f98a6d497993=1621240284,1621300029,1621410251,1621411597; PHPSESSID=mpmdmr4d7vneg6tpmmgm130gu1; user_id=3963; ZHBSESSID=e3aab6cf717a4d549c87735d0c39110e; Hm_lpvt_79ee0e9f63d4bd87c861f98a6d497993=1621504639'},method: 'POST',success: (res) => {uni.hideLoading()if (res.statusCode !== 200) {return uni.showToast({title: '获取数据失败',icon: "none",mask: true,})}console.log('原生获取res', res);this.objData = res.data.data},fail: (error) => {uni.hideLoading()uni.showToast({title: '请求接口失败',icon: "none",})console.log(error);}})},async getType() {const res = await this.$myRequest({url: 'yiiapp/order/list-all-web',})console.log('使用async await获取返回的参数', res);this.objData = res.data},postType() {this.$myRequest({url: 'yiiapp/car-ins-stat/get-car-ins-stat',method: 'POST',data: {agency_id: 125,stat_date_type: '3',dim: 'self-team-insurancecompany'}}).then(res => {console.log('使用.then()获取返回的参数', res);this.arrData = res.data})},changeType(e) {// console.log(e);this.value = e.target.value},get1() {getProductcategory().then(res => {console.log('res', res);this.arrData = res.data})},get2() {getInsurancecompany({ productCategory: 7 }).then(res => {console.log('res', res);this.arrData = res.data})},post1() {let obj = {insuranceCompany: "",insuranceName: "",pageIndex: 15,pageSize: 1,productCategory: ""}postInsurance(obj).then(res => {console.log('res', res);this.arrData = res.data})}}
}
</script><style lang="scss">
button {width: 260px;margin-top: 2px;
}
</style>

5.成功接口请求:
在这里插入图片描述在这里插入图片描述在这里插入图片描述

6.失败接口: 404提示:
在这里插入图片描述
接口调用成功200 但是data的状态码返回异常 做提示:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403636.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关“视觉神经系统是怎么形成的?”的思考

http://www.cnblogs.com/mrxsc/p/5571358.html 视觉信息的处理是一个非常复杂的过程&#xff0c;这不由得让我想到了同样位于人们大脑中的新大脑皮层&#xff0c;作为人类智能的起始之地&#xff0c;它的运作也不简单&#xff0c;但是在婴儿时期&#xff0c;它的各部分单元并没…

uni-app控制小程序版本更新;小程序自动更新版本;uni-app发布新版本后仍旧是老版本问题

问题&#xff1a; 首先小程序&#xff0c;更新版本发布后&#xff0c;用户的版本一般情况下仍是旧版本&#xff1b;需要手动删除小程序后&#xff0c;在重新搜索打开才能使用新版本&#xff1b; 原因查看&#xff1a; 运营机制&#xff1b;更新机制&#xff1b; 解决办法&…

浅尝boost之format

From: http://www.cnblogs.com/WuErPIng/archive/2005/04/21/142308.html 概述 std::string是个很不错的东东&#xff0c;但实际使用时基本在每个程序里都会遇到不愉快的事情&#xff1a;格式化字符串。我甚至由于这个原因在代码里引入平台有关的MFC&#xff0c;ATL等本…

nuxt 服务器构建因太耗CPU进程被杀解决办法

在本地打包然后上传到github 再下载到服务器 如果你项目中有.gitignore那把里面的.nuxt删了(.gitignore是设置GIT不上传的文件)并把dist改为/dist 然后用git或者sourcetree上传项目到github&#xff0c;我这里用的sourceTree 上传完成 到服务器把项目下载下来 我这用的linu…

实用的rpm网站

http://www.rpmfind.net和 http://rpm.pbone.net/转载于:https://blog.51cto.com/nickcoco/993222

在VisualStadio2015上使用EF6.0建立MySql数据库

1.新建工程 2.建立类的文件夹DAL 3.建立相关类 【Student类】 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace ETTest3{ public class Student { public int Id { get; set; } public string La…

固定列表的表格

固定的行&#xff1a;行名称不一样&#xff0c;每一个值对应赋值 html&#xff1a; <el-table class"table-box" :data"allObj.peoArr"><el-table-column prop"name" min-width"130"></el-table-column><el-ta…

拼图算法分析...

From: http://blog.sina.com.cn/s/blog_6a4b57e30100mfch.html 一、题目说明&#xff1a;   &#xff08;九宫问题&#xff09;在一个&#xff13;&#xff13;的九宫中有&#xff11;&#xff0d;&#xff18;这&#xff18;个数及一个空格随机的摆放在其中的格子里&#…

uni-app小程序本地打包超过2M不能预览问题;小程序打包过大不能预览和真机调试;uni-app分包;

一、问题&#xff1a;我们在小程序工具中开发时候&#xff0c;需要本地打包&#xff0c;但是当本地的打包文件大于2M时候&#xff0c;预览的二维码就会有问题&#xff0c;导致真机扫码打不开或者有遗漏。 二、此时就需要开启分包 1.微信小程序每个分包的大小是2M&#xff0c;总…

Asp.Net MVC开源CMS - Orchard

最近在学习Asp.Net MVC, 一直是step by step地看官方文档。 想找个成熟的MVC开发的开源系统&#xff0c;系统学习一下MVC, 搜索了一下&#xff0c;惊喜的发现了Orchard. 这个是介绍 2011/01/21号发布的关于Orchard的介绍&#xff0c;说明Orchard还是一个非常新鲜的事物。以后会…

拼图游戏及其相关算法

From: http://blog.sina.com.cn/s/blog_4ed8b87701011c6x.html 这个问题其实可以简单表述成&#xff0c;3*3的格子装了1至8&#xff0c;8个数字&#xff0c;数字是随机分布于各个格子中&#xff0c;问是否可以利用空格的格子&#xff0c;移动装有数字的格子最终达到某种序列&a…

在移位数组中查找数

题目描述&#xff1a; 一个数组是由一个递减数列左移若干位形成的&#xff0c;比如{4&#xff0c;3&#xff0c;2&#xff0c;1&#xff0c;6&#xff0c;5}是由{6&#xff0c;5&#xff0c;4&#xff0c;3&#xff0c;2&#xff0c;1}左移两位形成的&#xff0c;在这种数组中查…

小程序分享功能记录;小程序页面分享给好友携带参数

需求&#xff1a; 现有首页index和新增车辆页add-car。 正常操作流程是&#xff1a;从首页index点击按钮&#xff0c;会携带参数id跳转到新增车辆页add-car。 现在需求是用户A从首页index携带参数id跳转到新增车辆页add-car&#xff0c;在add-car页面点击分享按钮&#xff0c;将…

mysql事务处理

2019独角兽企业重金招聘Python工程师标准>>> ACID:Atomic、Consistent、Isolated、Durable 存储程序提供了一个绝佳的机制来定义、封装和管理事务。 1&#xff0c;MySQL的事务支持 MySQL的事务支持不是绑定在MySQL服务器本身&#xff0c;而是与存储引擎相关&#x…

记录一次uni-app页面跳转无效 来回跳转问题

问题&#xff1a;本身代码写的有问题导致的。从首页A跳转到新增页面B&#xff0c;在B页面点击保存后&#xff0c;再跳到首页A。此时在首页A&#xff0c;这时候无论点击跳转哪个页面&#xff0c;跳转成功后都会立即再跳回首页。 原因&#xff1a;B页面保存后&#xff0c;因为加了…

IE6双倍边距

2019独角兽企业重金招聘Python工程师标准>>> 前言&#xff1a;IE6双倍边距这个问题其实早在学习CSS之初都已经知道如何解决&#xff0c;但当时只知道如何解决而并不知道引起这个BUG的原因是什么&#xff0c;再接下来工 作过程中不断实践也终于明白是怎么回事了。但最…

typeid详解

From: http://www.cppblog.com/smagle/archive/2010/05/14/115286.aspx 在揭开typeid神秘面纱之前&#xff0c;我们先来了解一下 RTTI &#xff08;Run-Time Type Identification&#xff0c;运行时类型识别&#xff09;&#xff0c;它使程序能够获取由基指针或引用所指向的对…

H5静态页面跳转微信小程序;从外部浏览器,点击H5链接跳转打开微信小程序;以及在微信内直接点击H5链接打开微信小程序;

参考链接 需求&#xff1a;从外部浏览器&#xff0c;点击H5链接跳转打开微信小程序&#xff1b;以及在微信内直接点击H5链接打开微信小程序&#xff1b; 步骤1&#xff1a; 小程序开发需要使用云开发创建项目&#xff0c;使用云开发生成的项目会自带云函数文件夹&#xff1b;…

c简单的链表错误及改正

2019独角兽企业重金招聘Python工程师标准>>> 以下代码运行时崩溃&#xff1a; #include <iostream> using namespace std; struct node { int num; struct node * next; }; node * creat() { node * headNULL;node*HEADhead; cout<<"输入数字&…

uni-app微信小程序跳转公众号;微信小程序打开公众号;微信小程序识别二维码添加好友;微信小程序通过公众号添加好友;小程序里识别企业微信二维码点击联系人名片无反应?

需求&#xff1a; 在微信小程序页面中&#xff0c;长按识别图片二维码&#xff0c;识别出联系人后&#xff0c;点击添加好友&#xff1b; 问题&#xff1a;微信官方社区说是小程序添加不了好友&#xff1b; 解决方案&#xff1a; 目前只能通过微信小程序跳转至公众号&#xf…