uniapp luch-request 使用教程+响应对象创建

1. 介绍

  luch-request 是一个基于 Promise 开发的 uni-app 跨平台、项目级别的请求库。它具有更小的体积、易用的 API 和方便简单的自定义能力。luch-request 支持请求和响应拦截、全局挂载、多个全局配置实例、自定义验证器、文件上传/下载、任务操作、自定义参数以及多拦截器等功能。

2. 项目快速启动

安装

使用 npm 安装 luch-request

npm install luch-request -S
创建实例

在项目中创建一个 request 实例(utils/request.js),并进行基本的配置:

request.js:

import Request from 'luch-request'const baseUrl = 'http://192.168.1.167:8080/';const http = new Request();/** 设置全局配置 */
http.setConfig(config => {config.baseURL = baseUrl;// 配置基础urlconfig.header = {'Content-Type': 'application/json;charset=UTF-8',"Access-Control-Allow-Origin": "*",};config.timeout = 15 * 1000;// 请求超时时间15sreturn config
})/** 请求之前拦截 */
http.interceptors.request.use(config => {uni.showLoading({title: '数据加载中...',mask: true});// 设置5s中setTimeout(function(){uni.hideLoading()},5000)/* if (uni.getStorageSync('resToken')) {config.header["Authorization"] = `Bearer ${uni.getStorageSync("resToken")}`;} */return config
},
error => {// 失败return Promise.reject(error)
})/** 响应拦截器 */
http.interceptors.response.use(response => {console.log("response",response)// 解析response.data中数据,根据返回值修改const {data,success,message,token,} = response.data//console.log("message",message)//console.log("success",success)if (success) {uni.hideLoading()// 存储token到本地uni.setStorageSync('resToken', token)return response.data}else{uni.showToast({//title: message,title:"请求失败",icon: 'error',duration:2000,// 显示2s})uni.setStorageSync('resToken', null)// 跳转回登录页面uni.switchTab({url: '/pages/login/login'})}
},
error =>{// 对响应错误做点什么return Promise.reject(error);
})export default http;

3.创建请求方法

项目中创建api/api.js:

api.js:

import http from '@/utils/request.js'// 获取用户信息-无参数
export function loginUser(){return http.get('/api/loginUser.api')
}// 登录post请求 
export function LoginPostMethod(data) {return http.post(`/api/login.api?account=${data.account}&password=${data.password}`)
}// 登录post请求-Map<String, String>对象参数 
export function LoginPostParamsMethod(data) {// data 必须为对象return http.post('/api/paramsLogin.api',data)
}// 登录get请求 
export function LoginGetMethod(data) {return http.get(`/api/login.api?account=${data.account}&password=${data.password}`)
}// 登录get请求-params参数 (只能get请求写params参数,post请求不能这么写报错)
export function LoginGetParamsMethod(data) {return http.get('/api/paramsLogin.api',{params: {acc: data.account,psw: data.password}})
}// 箭头函数 - 修改密码
export const updatePassword = (data) =>{return http.post('/api/updatePassword.api',data)
}// 上传图片
/* export function upPhoto(data) {return http.upload('app/inspection/inspectionPictureUploaded', {filePath: data.file.path,name: 'file',params: {inspectionId: data.inspectionId}}).then(res => {console.log(res);}).catch(err => {console.error(err);}); // return http.upload('api/upload/img', {//   files: [file], // 需要上传的文件列表//   name: 'file', // 文件对应的 key//   formData: {//     // 其他额外的 form data//   }// }).then(res => {//   console.log(res);// }).catch(err => {//   console.error(err);// });} */

4.使用方法

methods:{async submit(){// 无参数get请求//const userInfo = await loginUser();//console.log("userInfo",userInfo)/*** 默认账号:admin* 默认密码:123*/// 模拟传递对象const obj = {account:"admin",password:"123"}// 调用get请求//const getResult = await LoginGetMethod(obj);//console.log("getResult",getResult);//param参数get请求const getParamsResult = await LoginGetParamsMethod(obj);console.log("getParamsResult",JSON.stringify(getParamsResult));// 调用post请求//const postResult = await LoginPostMethod(obj);//console.log("postResult",JSON.stringify(postResult));// Map<String, String>对象参数post请求//const postParamsResult = await LoginPostParamsMethod(obj);//console.log("postParamsResult",JSON.stringify(postParamsResult));},************async jumpPage(data){// 跳转页面const res = await updatePassword(data);if(res.success){uni.navigateBack({url: '/pages/my/my'});}else{uni.showToast({title: "修改失败",icon: "error"}) }},******submit(){// 验证表单 (箭头函数异步方法)this.$refs.loginForm.validate().then(async res=>{console.log('验证通过',res);/*** 默认账号:admin* 默认密码:123*/// 调用/store/index.js 中logIn方法const result = await store.dispatch('logIn', res)//console.log("result结果",result);if(result.success){setTimeout(function() {uni.showToast({title: '登录成功',})}, 800);// 页面跳转uni.reLaunch({url: '/pages/index/index'});}}).catch(err=>{console.log('表单数据错误信息:', err);/* uni.showToast({title:'登录失败',icon:'error',}) */});			},}

5.后台代码(若依)

LoginController:

package com.ruoyi.api.login.controller;import com.ruoyi.api.login.entity.User;
import com.ruoyi.api.login.response.ResponseData;
import org.springframework.web.bind.annotation.*;import java.util.Map;/*** 移动端登录* */
@RestController
@RequestMapping("/api")
public class LoginController {/*** GET请求无参数* */@GetMapping("/loginUser.api")@ResponseBodypublic ResponseData getLoginUser(){System.out.println("无参数GET请求");User user = new User();user.setAccount("admin");user.setPassword("123");user.setToken("new_token");user.setMessage("请求成功");user.setSuccess(true);return ResponseData.success(user);}/*** GET请求* 返回字符串* */@GetMapping("/login.api")@ResponseBodypublic ResponseData getLogin(String account, String password){System.out.println("登录GET请求-------");System.out.println("账号--"+account);System.out.println("密码--"+password);if ("admin".equals(account) && "123".equals(password)){return ResponseData.success("get请求成功");}return ResponseData.error("get请求失败");}/*** GET请求-params参数* 返回字符串** @ResponseBody* 将方法返回值直接响应给浏览器* 如果返回值类型是实体对象/集合,将会转换为JSON格式后在响应给浏览器* */@GetMapping("/paramsLogin.api")@ResponseBodypublic ResponseData getParamsLogin(@RequestParam(value = "acc") String account,@RequestParam(value = "psw") String password){System.out.println("登录GET请求params参数-------");System.out.println("账号--"+account);System.out.println("密码--"+password);if ("admin".equals(account) && "123".equals(password)){return ResponseData.success("GET请求params参数成功");}return ResponseData.error("GET请求params参数失败");}/*** POST请求* 返回对象**  @ResponseBody*  将方法返回值直接响应给浏览器*  如果返回值类型是实体对象/集合,将会转换为JSON格式后在响应给浏览器* */@PostMapping("/login.api")public User postLogin(String account,String password){System.out.println("登录POST请求-------");System.out.println("账号--"+account);System.out.println("密码--"+password);// 创建模拟对象User user = new User();if ("admin".equals(account) && "123".equals(password)){user.setAccount(account);user.setPassword(password);user.setToken("new_token");user.setMessage("请求成功");user.setSuccess(true);return user;}user.setMessage("请求失败");user.setSuccess(false);return user;}/*** 前端传递过来的参数必须为对象* POST请求-Map<String, String>对象参数* 返回ResponseData对象* */@RequestMapping(value = "/paramsLogin.api",method = RequestMethod.POST)public ResponseData postParamsLogin(@RequestBody Map<String, String> body){System.out.println("body"+body);System.out.println("登录POST请求Map<String, String>对象参数-------");System.out.println("账号--"+body.get("account"));System.out.println("密码--"+body.get("password"));String acc = body.get("account");String psw = body.get("password");// 创建模拟对象User user = new User();if ("admin".equals(acc) && "123".equals(psw)){user.setAccount(acc);user.setPassword(psw);user.setToken("new_token");user.setMessage("Map对象参数请求成功");user.setSuccess(true);return ResponseData.success(user);}return ResponseData.error("postMap对象请求失败");}/*** 修改密码* POST请求-Map<String, String>对象参数* 返回ResponseData对象* */@PostMapping("/updatePassword.api")public ResponseData updatePassword(@RequestBody Map<String,String> body){System.out.println("修改密码POST请求Map<String, String>对象参数-------");System.out.println("body"+body);String oldPassword = body.get("oldPassword");System.out.println("oldPassword:"+oldPassword);String newPassword = body.get("newPassword");System.out.println("newPassword:"+newPassword);String confirmPassword = body.get("confirmPassword");System.out.println("confirmPassword:"+confirmPassword);// 创建模拟对象User user = new User();if("123".equals(oldPassword) && confirmPassword.equals(newPassword)){user.setPassword(newPassword);user.setToken("new_token");user.setMessage("Map对象参数请求成功");user.setSuccess(true);return ResponseData.success(newPassword);}return ResponseData.error("修改失败");}}

User:

package com.ruoyi.api.login.entity;import com.ruoyi.common.core.domain.BaseEntity;public class User extends BaseEntity {private static final long serialVersionUID = 1L;/** 编号 */private Long tableId;private String account;// 账号private String password;// 密码private String token;//tokenprivate String message;// 信息private Boolean success;// 是否成功public Long getTableId() {return tableId;}public void setTableId(Long tableId) {this.tableId = tableId;}public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getToken() {return token;}public void setToken(String token) {this.token = token;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public Boolean getSuccess() {return success;}public void setSuccess(Boolean success) {this.success = success;}
}

响应对象

ErrorCodeEnum:

package com.ruoyi.api.login.response.enums;public enum ErrorCodeEnum {NOT_LOGIN(301, "请登录"),PASS_LOGIN(301, "登录已超时,请重新登录");private Integer code;private String message;private ErrorCodeEnum(Integer code, String message) {this.code = code;this.message = message;}public Integer getCode() {return this.code;}public void setCode(Integer code) {this.code = code;}public String getMessage() {return this.message;}public void setMessage(String message) {this.message = message;}}

ResponseData:

package com.ruoyi.api.login.response;import com.ruoyi.api.login.response.enums.ErrorCodeEnum;public class ResponseData {public static final String DEFAULT_SUCCESS_MESSAGE = "请求成功";public static final String DEFAULT_ERROR_MESSAGE = "网络异常";public static final Integer DEFAULT_SUCCESS_CODE = 200;public static final Integer DEFAULT_ERROR_CODE = 500;private Boolean success;private Integer code;private String message;private Object data;public ResponseData() {}public ResponseData(Boolean success, Integer code, String message, Object data) {this.success = success;this.code = code;this.message = message;this.data = data;}public static SuccessResponseData success() {return new SuccessResponseData();}public static SuccessResponseData success(Object object) {return new SuccessResponseData(object);}public static SuccessResponseData success(Integer code, String message, Object object) {return new SuccessResponseData(code, message, object);}public static ErrorResponseData error(String message) {return new ErrorResponseData(message);}public static ErrorResponseData error(Integer code, String message) {return new ErrorResponseData(code, message);}public static ErrorResponseData error(Integer code, String message, Object object) {return new ErrorResponseData(code, message, object);}public static ResponseData error(ErrorCodeEnum errorCodeEnum) {return error(errorCodeEnum.getCode(), errorCodeEnum.getMessage(), (Object)null);}public Boolean getSuccess() {return this.success;}public Integer getCode() {return this.code;}public String getMessage() {return this.message;}public Object getData() {return this.data;}public void setSuccess(Boolean success) {this.success = success;}public void setCode(Integer code) {this.code = code;}public void setMessage(String message) {this.message = message;}public void setData(Object data) {this.data = data;}public boolean equals(Object o) {if (o == this) {return true;} else if (!(o instanceof ResponseData)) {return false;} else {ResponseData other = (ResponseData)o;if (!other.canEqual(this)) {return false;} else {label59: {Object this$success = this.getSuccess();Object other$success = other.getSuccess();if (this$success == null) {if (other$success == null) {break label59;}} else if (this$success.equals(other$success)) {break label59;}return false;}Object this$code = this.getCode();Object other$code = other.getCode();if (this$code == null) {if (other$code != null) {return false;}} else if (!this$code.equals(other$code)) {return false;}Object this$message = this.getMessage();Object other$message = other.getMessage();if (this$message == null) {if (other$message != null) {return false;}} else if (!this$message.equals(other$message)) {return false;}Object this$data = this.getData();Object other$data = other.getData();if (this$data == null) {if (other$data != null) {return false;}} else if (!this$data.equals(other$data)) {return false;}return true;}}}protected boolean canEqual(Object other) {return other instanceof ResponseData;}public int hashCode() {boolean PRIME = true;int result = 1;Object $success = this.getSuccess();result = result * 59 + ($success == null ? 43 : $success.hashCode());Object $code = this.getCode();result = result * 59 + ($code == null ? 43 : $code.hashCode());Object $message = this.getMessage();result = result * 59 + ($message == null ? 43 : $message.hashCode());Object $data = this.getData();result = result * 59 + ($data == null ? 43 : $data.hashCode());return result;}public String toString() {Boolean var10000 = this.getSuccess();return "ResponseData(success=" + var10000 + ", code=" + this.getCode() + ", message=" + this.getMessage() + ", data=" + this.getData() + ")";}}

ErrorResponseData:

package com.ruoyi.api.login.response;public class ErrorResponseData extends ResponseData{private String exceptionClazz;public ErrorResponseData(String message) {super(false, ResponseData.DEFAULT_ERROR_CODE, message, (Object)null);}public ErrorResponseData(Integer code, String message) {super(false, code, message, (Object)null);}public ErrorResponseData(Integer code, String message, Object object) {super(false, code, message, object);}public String getExceptionClazz() {return this.exceptionClazz;}public void setExceptionClazz(String exceptionClazz) {this.exceptionClazz = exceptionClazz;}public boolean equals(Object o) {if (o == this) {return true;} else if (!(o instanceof ErrorResponseData)) {return false;} else {ErrorResponseData other = (ErrorResponseData)o;if (!other.canEqual(this)) {return false;} else {Object this$exceptionClazz = this.getExceptionClazz();Object other$exceptionClazz = other.getExceptionClazz();if (this$exceptionClazz == null) {if (other$exceptionClazz != null) {return false;}} else if (!this$exceptionClazz.equals(other$exceptionClazz)) {return false;}return true;}}}protected boolean canEqual(Object other) {return other instanceof ErrorResponseData;}public int hashCode() {boolean PRIME = true;int result = 1;Object $exceptionClazz = this.getExceptionClazz();result = result * 59 + ($exceptionClazz == null ? 43 : $exceptionClazz.hashCode());return result;}public String toString() {return "ErrorResponseData(exceptionClazz=" + this.getExceptionClazz() + ")";}}

SuccessResponseData:

package com.ruoyi.api.login.response;public class SuccessResponseData extends ResponseData{public SuccessResponseData() {super(true, DEFAULT_SUCCESS_CODE, "请求成功", (Object)null);}public SuccessResponseData(Object object) {super(true, DEFAULT_SUCCESS_CODE, "请求成功", object);}public SuccessResponseData(Integer code, String message, Object object) {super(true, code, message, object);}}

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

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

相关文章

MySQL技巧之跨服务器数据查询:基础篇-A数据库与B数据库查询合并--封装到存储过程中

MySQL技巧之跨服务器数据查询&#xff1a;基础篇-A数据库与B数据库查询合并–封装到存储过程中 我们的最终目的是什么&#xff1f;当然的自动执行这些合并操作&#xff01; 上一篇 MySQL技巧之跨服务器数据查询&#xff1a;基础篇-A数据库与B数据库查询合并 我们已经知道怎么合…

解决 IDEA 修改代码重启不生效的问题

前言 在使用 IntelliJ IDEA 进行 Java 项目开发时&#xff0c;有时会遇到一个令人头疼的问题&#xff1a;修改了代码后&#xff0c;重启服务却发现更改没有生效。通常情况下&#xff0c;解决这个问题需要通过 Maven 的 clean 和 compile 命令来强制重新编译&#xff0c;但这显…

【Mysql】Mysql函数(上)

1、概述 在Mysql中&#xff0c;为了提高代码重用性和隐藏实现细节&#xff0c;Mysql提供了很多函数。函数可以理解为封装好的模块代码。 2、分类 在Mysql中&#xff0c;函数非常多&#xff0c;主要可以分为以下几类&#xff1a; &#xff08;1&#xff09;聚合函数 &#xf…

帧中继原理与配置

Frame Relay 帧中继 LMI(Local Management Interface)本地管理接口 LMI协议通过状态查询报文和状态应答报文维护帧中继的链路状态和PVC状态. DLCI(Data Link Connection Identifier)数据链路连接标识符 DLCI只在本地接口和与之直接相连的对端接口有效,不具有全局有效性,记载帧…

Spring Boot 接口防重复提交解决方案

文章目录 前言使用Token机制实现步骤1.生成Token2.传递Token3.验证Token 使用Redis实现步骤1.引入Redis依赖2.生成Token3.传递Token4.验证Token 使用Spring AOP实现步骤1.定义注解2.创建切面3.使用注解 总结 前言 在Web开发中&#xff0c;防止用户重复提交表单是一个常见的需求…

【QT】解决生成的exe文件出现“无法定位程序入口”或“找不到xxx.dll”的问题

【QT】解决生成的exe文件出现“无法定位程序入口”或“找不到xxx.dll”的问题 零、问题 使用QT编译好项目后&#xff0c;想直接在文件资源管理器中运行exe程序或想分享出去给别人使用发现出现如下问题&#xff1a; 系统错误&#xff1a;找不到xxx.dll。 无法找到入口&#x…

Tomcat启动过程中cmd窗口(控制台)中文乱码的问题

目录 一、问题产生 二、问题分析 三、解决方法(2种) 一、问题产生 在服务器上使用新的Tomcat9(绿色版ZIP),打开一个cmd窗口后,将路径定位到“tomcat\bin\”目录,运行“startup.bat”。程序会自动打开一个新窗口,这个是Java程序的运行窗口,但是里面的中文全是乱码,如…

【MySQL】MySQL数据库入门:构建你的数据基石

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;MySQL初阶探索&#xff1a;构建数据库基础 欢迎大家点赞收藏评论&#x1f60a; 目录 &#x1f985;数据库基础&#x1f400;什么是数据库&#x1f40f;主流数据库&#x1f986;MySQL数据库的基本…

如何使用正则表达式验证域名

下面是一篇关于如何使用正则表达式验证域名的教程。 如何使用正则表达式验证域名 简介 域名是互联网上网站的地址&#xff0c;每个域名由多个标签&#xff08;label&#xff09;组成&#xff0c;标签之间用点 . 分隔。域名规则有很多细节&#xff0c;但基本要求是&#xff1a…

Python中的正则表达式教程

一、 正则表达式基础 1。1。概念介绍 正则表达式是用于处理字符串的强大工具,它并不是Python的一部分。 其他编程语言中也有正则表达式的概念,区别只在于不同的编程语言实现支持的语法数量不同。 它拥有自己独特的语法以及一个独立的处理引擎&#xff0c;在提供了正则表达式…

2024 同一个网段,反弹shell四种方法【linux版本】bash、python、nc、villian反弹shell图解步骤

实验环境准备&#xff08;同一个网段下&#xff0c;我是桥接的虚拟机&#xff09; 一、bash反弹shell 二、python反弹shell 三、nc反弹shell 四、villain反弹shell 实验环境准备&#xff08;同一个网段下&#xff0c;我是桥接的虚拟机&#xff09; 一台kali的linux(攻击者)…

Nginx server_name配置错误导致路由upstream超时问题

一、问题描述 某次本平台和外部平台接口调用&#xff0c;同样Nginx location配置&#xff0c;测试环境调用正常&#xff0c;生产环境调用返回失败&#xff1b; 相关链接&#xff1a;Nginx官方文档、server_name、How nginx processes a request 二、排查处理 1&#xff09…

6.584-Lab1:MapReduce

前置知识/概念 Raft 是一个基于“Leader”的协议&#xff0c;能够保证分布式网路的一致性。 RPC&#xff08;Remote Producer Call&#xff09; 参考链接1 参考链接2 Go中RPC的简单实现 Golang中regexp正则表达式的用法 https://gukaifeng.cn/posts/golang-zheng-ze-biao-…

脑机接口、嵌入式 AI 、工业级 MR、空间视频和下一代 XR 浏览器丨RTE2024 空间计算和新硬件专场回顾

这一轮硬件创新由 AI 引爆&#xff0c;或许最大受益者仍是 AI&#xff0c;因为只有硬件才能为 AI 直接获取最真实世界的数据。 在人工智能与硬件融合的新时代&#xff0c;实时互动技术正迎来前所未有的创新浪潮。从嵌入式系统到混合现实&#xff0c;从空间视频到脑机接口&…

Restful API接⼝简介及为什么要进⾏接⼝压测

一、RESTful API简介 在现代Web开发中&#xff0c;RESTful API已经成为一种标准的设计模式&#xff0c;用于构建和交互网络应用程序。本文将详细介绍RESTful API的基本概念、特点以及如何使用它来设计高效的API接口。 1. 基于协议 HTTP 或 HTTPS RESTful API通常使用HTTP&am…

面试经典 150 题:20、2、228、122

20. 有效的括号 参考代码 #include <stack>class Solution { public:bool isValid(string s) {if(s.size() < 2){ //特判&#xff1a;空字符串和一个字符的情况return false;}bool flag true;stack<char> st; //栈for(int i0; i<s.size(); i){if(s[i] ( |…

Python爬虫下载新闻,Flask展现新闻(2)

上篇讲了用Python从新闻网站上下载新闻&#xff0c;本篇讲用Flask展现新闻。关于Flask安装网上好多教程&#xff0c;不赘述。下面主要讲 HTML-Flask-数据 的关系。 简洁版 如图&#xff0c;页面简单&#xff0c;主要显示新闻标题。 分页&#xff0c;使用最简单的分页技术&…

基于Java和Vue实现的上门做饭系统上门做饭软件厨师上门app

市场前景 生活节奏加快&#xff1a;在当今快节奏的社会中&#xff0c;越来越多的人因工作忙碌、时间紧张而无法亲自下厨&#xff0c;上门做饭服务恰好满足了这部分人群的需求&#xff0c;为他们提供了便捷、高效的餐饮解决方案。个性化需求增加&#xff1a;随着人们生活水平的…

【配置后的基本使用】CMake基础知识

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;各种软件安装与配置_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1.…

Centos 7 安装wget

Centos 7 安装wget 最小化安装Centos 7 的话需要上传wget rpm包之后再路径下安装一下。rpm包下载地址&#xff08;http://mirrors.163.com/centos/7/os/x86_64/Packages/&#xff09; 1、使用X-ftp 或者WinSCP等可以连接上传的软件都可以首先连接服务器&#xff0c;这里我用的…