import Taro from '@tarojs/taro'
const CODE_SUCCESS = 200
const CODE_FORBIDDEN = 403
const BASE_URL = '请求域名'
const ERROR_MSG_MAP = {
[CODE_FORBIDDEN]: '未登录',
default: '请求异常'
}
let loadingCount = 0
function showLoading() {
if (loadingCount === 0) {
Taro.showLoading({
title: "加载中",
mask: true,
})
}
loadingCount++
}
function hideLoading() {
if (loadingCount <= 0) {
return;
}
loadingCount--;
if (loadingCount === 0) {
Taro.hideLoading();
}
}
function getStorage(key) {
return Taro.getStorage({
key
})
.then((res) => res.data)
.catch(() => '')
}
async function fetch(options) {
const {
url,
method = "GET",
showToast = false,
autoLogin = false,
leaveMeAlone = false,
data
} = options;
let token = "";
try {
const result = await getStorage('X-Auth-Token');
token = result || "";
} catch (error) {
console.log(error);
}
let header = {
};
if (token !== "") {
header['X-Auth-Token'] = token;
}
if (method === "POST") {
header['content-type'] = "application/json";
} else if (method === "PUT") {
header['content-type'] = "application/x-www-form-urlencoded;charset=UTF-8";
}
let addr = "";
if (leaveMeAlone) {
addr = url;
} else {
addr = `${BASE_URL}${url}`;
}
try {
showLoading();
let response = {};
if (url === '上传') {
response = await Taro.uploadFile({
url: addr,
filePath: data.path,
name: 'file',
formData: {
photoTime: data.time,
},
header: {
WX_UID: '',
Authorization: token,
...header,
}
});
} else {
response = await Taro.request({
url: addr,
method,
data,
headers: {
...header
},
});
}
hideLoading();
//处理错误情况
const {
statusCode
} = response;
if (statusCode !== CODE_SUCCESS) {
throw new Error(ERROR_MSG_MAP[statusCode] || ERROR_MSG_MAP.default)
}
//处理返回结果中status不为success的情况
const responseData = response.data || {};
if (responseData.status && responseData.status !== CODE_SUCCESS) {
throw new Error(responseData.message || ERROR_MSG_MAP.default)
}
//处理返回结果中code不为200或500的情况
if (responseData.code && (responseData.code !== CODE_SUCCESS && responseData.code !== 500)) {
throw new Error(responseData.message || ERROR_MSG_MAP.default)
}
//处理get请求没有数据时的情况
if (method === 'GET' && !responseData.data) {
throw new Error('暂无数据')
}
return responseData;
} catch (error) {
hideLoading();
//统一进行错误提示和抛出异常信息给上层调用者
if (showToast) {
let message = '';
if (typeof error === Object && error.hasOwnProperty('message')) {
message = error.message;
} else {
message = '网络出错,请稍后再试!';
}
Taro.showToast({
title: message,
icon: "none",
duration: 3000,
})
}
throw new Error(error);
}
}
export default fetch;
相关推荐
Vue+UniApp构建一番赏小程序:前后端统一技术栈实战
跨端开发是移动应用开发中的重要技术方向,它通过一套代码实现多端部署,显著提升开发效率。Vue.js作为渐进式前端框架,结合UniApp的跨端编译能力,能够将Vue组件编译成小程序、App等多端应用。这种技术组合在电商场景中体现巨大价值,特别是在需要实时交互的一番赏等业务中,既能保证前端用户体验,又能通过统一技术栈降低维护成本。实际开发中,通过云函数处理高并发抽奖逻辑,配合Vuex/Pinia进行状态管理,实现库存扣减和概率算法的工程化应用。本文基于一番赏小程序案例,展示如何运用Vue+UniApp技术栈解决
taro-基于react原生数据请求方式fetch简易封装taro.request
import Taro from '@tarojs/taro' import { API_USER, API_USER_LOGIN } from '../redux/constants/api' const CODE_SUCCESS = '200' const CODE_AUTH_EXPIRED = '600' function getStorage(key) { return Taro.getStorage({ key }).then(res => res.data).catch(() =&
微信小程序源码精选250套:高质量项目库的构建与实战指南
在软件开发领域,源码学习是提升工程能力的核心路径。其原理在于通过分析、复用和重构经过验证的代码,快速掌握特定技术栈的最佳实践与架构模式。对于微信小程序开发而言,一个高质量、可运行的源码集合具有极高的技术价值,它能显著降低学习曲线,为开发者提供从UI组件、业务逻辑到性能优化、第三方服务集成的完整参考。在实际应用场景中,无论是初学者进行功能拆解与模仿,还是中级开发者进行模块移植与架构借鉴,亦或是团队进行技术方案预研与代码规范制定,一个经过严格筛选、分类清晰且文档齐全的源码仓库都能极大提升开发效率与代码质量。本文
小程序的数据接口
微信小程序的数据请求 常用的数据请求方式 JS原生实现 第一种: let xhr=new XMLHttpRequest() xhr.open() xhr.send() 第二种:fetch() 支持promise fetch('接口地址') .then(function(response) { return response.json(); }) .then(function(myJson) { console.log(myJson); }) .cat
前端开发进阶:从布局交互到AI赋能的全链路实战指南
前端开发是构建用户与数字世界交互界面的核心技术,其核心在于将设计转化为高效、可维护的代码。理解浏览器渲染机制、DOM操作原理及CSS布局模型是基础,这直接关系到页面性能与用户体验。在工程实践中,通过模块化、组件化提升代码复用性和可维护性具有重要技术价值,广泛应用于Web应用、移动端及跨平台开发。随着技术演进,前端与AI结合催生了智能UI、低代码平台等新场景。本文通过Flexbox/Grid布局抉择、事件委托优化、Vue/React状态管理等实战案例,深入探讨了前端工程化与性能监控方案,并分析了在AI浪潮下前
Codex与Claude Code本质区别:补全引擎 vs 编程协作者
AI编程工具的核心差异不在生成能力高低,而在于底层定位——代码自动补全(如Codex)聚焦语法层上下文预测,依赖IDE集成与实时代码索引;可对话编程协作者(如Claude Code)则基于长上下文理解与多轮交互,支撑架构决策、跨平台适配与技术债评估。其技术价值体现在提升开发意图到实现的转化效率,而非替代工程师判断。典型应用场景包括微服务重构中的冷启动适配、遗留系统迁移方案比选、CI/CD配置生成与审计等。理解Codex安装即Copilot启用、Claude Code需独立运行及网络连通等基础机制,是规避‘离
React fetch基本使用及二次封装
。
普通开发者如何选AI编程工具:按场景、成本与硬件匹配
AI编程工具是当前开发者提升效率的关键基础设施,其本质是将大模型能力封装为可集成的代码生成、补全与理解服务。核心原理依赖上下文感知、代码库索引与模型推理三重机制,技术价值在于降低重复编码门槛、加速MVP验证周期,并缓解初级开发者的学习曲线陡峭问题。典型应用场景覆盖自由职业接单(需零配置快速交付)、企业内网合规开发(强调数据不出域)、学生作品集构建(依赖本地轻量模型)。本文聚焦真实约束条件——如MacBook Air/8G内存/月入8K预算——结合Replit、GitHub Copilot、Cursor三款主
Taro 正式发布 3.6 版本:支持跨端路由、请求库,新增鸿蒙、Web 端平台插件,小程序持续集成 CI 能力升级...
大家好,我是若川。我持续组织了近一年的源码共读活动,感兴趣的可以点此扫码加我微信lxchuan12参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》包含20余篇源码文章。历史面试系列。另外:目前建有江西|湖南|湖北籍前端群,可加我微信进群。扫码加我微信 lxchuan12、拉你进源码共读群两个月前,我们发布了 Taro v3.6 的 cana...
Vibe Coding:当AI把需求直接翻译成代码,工程师该信多少?
Vibe Coding(感觉编程)正重塑软件开发范式——它并非简单的AI代码补全,而是大语言模型对‘用户意图’的跨模态理解与工程化翻译。其核心原理在于将自然语言需求映射为符合安全规范、架构约束和业务语义的可执行代码,技术价值体现在大幅压缩MVP周期与降低协作门槛。典型应用场景包括快速原型开发、非核心模块生成及低代码增强,但高度依赖Prompt工程、上下文约束与自动化审计。本文聚焦真实项目中暴露的逻辑缺陷、安全漏洞与架构腐化等可量化风险,结合vibe_id追踪、意图对齐审查与Node.js环境兼容性实践,提供
前端校招面试全流程复盘:从基础到工程化,联想22届真题解析
前端开发是当前互联网行业需求量最大的技术方向之一,但校招考察的核心往往不是框架API的熟练度,而是对JavaScript基础、浏览器原理、工程化实践等底层能力的理解深度。从事件循环到虚拟DOM,从HTTP缓存到微前端架构,这些技术概念共同构成了中大厂前端岗位的能力基线。联想22届校招前端岗的面试流程完整覆盖了笔试、技术面、项目深挖和综合面,其中工程化能力(如代码规范、CI/CD、组件库设计)成为区分候选人的关键隐形加分项。本文结合真实面试真题与入职体验,解析前端校招中的高频考点、场景题排查思路及手写题边界处
Axios、Fetch、原生Ajax、微信小程序的wx.request是什么?使用方法是?(简洁且带有代码示例)
Axios、Fetch和原生AJAX、微信小程序的wx.request都是用于在前端发送网络请求的工具。它们可以用来与服务器通信并接收响应数据。
从零构建小说阅读系统:全栈开发实战与架构设计详解
Web应用开发的核心在于理解如何通过前后端协作处理数据与交互。其基本原理通常遵循MVC架构,将业务逻辑、数据模型与用户界面分离。在技术价值上,一个设计良好的Web系统能高效管理数据、提供流畅用户体验并支撑业务扩展。常见的应用场景包括内容管理系统、电商平台及在线服务平台。本文以构建一个**小说阅读系统**为例,深入探讨其全栈实现。系统需处理**海量章节文本**的存储与高效查询,这涉及到数据库长文本字段(如LONGTEXT)的使用与优化策略。通过剖析用户认证、内容分页、阅读器前端实现及后台批量导入等关键模块,展
微信小程序开发框架与工具链选型实战:Taro vs uni-app深度解析
在微信小程序开发中,开发框架与工具链是构建高效、可维护应用的技术基石。其核心原理在于通过编译转换或运行时适配,将现代前端开发范式(如组件化、状态管理)引入小程序环境,从而提升代码复用率和开发体验。从技术价值看,合适的框架能显著降低多端适配成本,统一团队技术栈,而配套的工具链则能实现工程化、自动化,保障代码质量和部署效率。在应用场景上,无论是追求快速迭代的业务型应用,还是需要长期维护的复杂中大型项目,都需要根据团队技术栈(React/Vue)、多端需求强度、性能要求等因素进行综合选型。例如,Taro凭借其Re
ENU坐标系实战:5分钟搞定无人机导航中的站心坐标转换
本文针对无人机导航中GPS坐标与视觉感知不匹配的定位漂移问题,提供了基于ENU坐标系的实战解决方案。通过Python代码演示了如何快速、精准地实现地心地固坐标与站心坐标之间的转换,并详细解释了转换原理、精度对比及工程优化技巧,帮助开发者从根本上解决局部相对定位不准的难题。
Outlook总是提示登录微软,怎么办?
Outlook 2021反复弹出Microsoft登录窗口,可能是由于Modern Authentication身份验证机制或凭据问题导致。解决方案包括:1)通过注册表关闭Modern Authentication(适用于本地Exchange);2)清理Windows凭据管理器中的旧认证信息;3)手动配置Exchange服务器地址;4)通过注册表阻止Microsoft登录窗口弹出(适用于非M365环境)。建议按顺序尝试,尤其前两步通常能解决问题。经测试,步骤1和2已有效解决该问题。
Taro跨端开发实战:从环境搭建到多端发布全流程指南
跨端开发框架通过一套代码适配多个平台,其核心原理在于编译时将统一的组件和API映射到不同平台的原生实现,从而显著提升开发效率和维护性。这种技术为追求快速市场验证和商业变现的团队带来了巨大价值,尤其在需要覆盖微信、抖音、支付宝等多个流量入口的场景下。Taro作为主流解决方案,允许开发者使用熟悉的React或Vue语法进行开发,其多端编译能力能有效帮助项目抢占市场先机,并打通流量主等商业化路径。本文将以Taro 4.x和React为例,详细解析从项目初始化、核心概念、样式适配、状态管理到网络请求封装和最终多端编
BugkuCTF-PWN题pwn2-overflow超详细讲解
解题思路 1)计算出get_shell_的地址偏移量 2)算出来之后就直接溢出到后门函数 知识点 x64函数调用规则 解题之前我们先学下linux x64的函数调用规则。 x64机器在调用某个函数前,比如int func(int a, int b, int c, int d, int e, int f, int g, int h),首先他会把前6个参数从左往右存入到寄存器rdi、rsi、rdx、rcx、r8、r9,其余参数存入到栈里,保存的顺序是从右往左入栈。比如abcdef会存入到寄存器里,然后一次入栈h
前端技术官方文档合集
问题来源:每次想查阅资料的时候发现都要去浏览器搜索各种各样的文档,可能还找不到对应的官方文档,特地汇总以便一次性能够找到。
ensp企业网综合实验(课程设计)
使用MSTP+VRRP技术实现负载均衡以及增加网络的可靠性;出口配置napt;所有用户均为自动获取IP地址;
【智能优化算法】2024年SCI鳗鱼-石斑鱼优化算法(EGO),含MathType公式、word伪代码、visio流程图、matlab代码等。
该文中包括5个内容:用MathType编辑的公式、伪代码、visio的流程图,matlab代码,PDF论文,拿来直接用,可以帮助科研者省下超多时间。 鳗鱼-石斑鱼优化算法(Eel and grouper optimizer ,EGO)是一种新型的元启发式算法(智能优化算法),灵感来源于海洋生态系统中鳗鱼和石斑鱼的共生作用和觅食策略。该成果由Ali Mohammadzadeh和Seyedali Mirjalili两位作者于2024年6月发表在SCI著名期刊《Cluster Computing》上。
Django+React+Redux全栈架构:面向Mobile Apps的离线优先实践
现代Web应用开发中,前后端分离已成标配,但真正决定项目成败的是状态一致性、网络容错性与跨端复用能力。Django凭借其强类型序列化、权限控制与事务安全,成为高可靠后端首选;而React结合Redux Toolkit(RTK)则提供了可预测的状态管理机制,尤其在Mobile Apps场景下,面对弱网、离线、多端同步等挑战,RTK Query的声明式数据获取、自动缓存与失效策略显著降低bug率。本文聚焦Django REST Framework序列化设计与Redux normalized store的协同建模
把 SAP BTP Destination 写进 MTA:一段 com.sap.application.content 配置背后的部署编排学
MTA内容模块解析:SAP BTP中的声明式部署机制 本文详细解析了mta.yaml中com.sap.application.content模块在SAP BTP云环境中的作用。该模块通过声明式配置实现内容投递,无需编译或部署代码。核心功能包括: Destination创建:通过content-target:true标识将配置投递到Destination服务 HTML5应用部署:将静态资源投递到HTML5 Application Repository 安全集成:配置XSUAA服务实现OAuth2用户令牌交换
Vibe Coding:一种低摩擦、高反馈的轻量级人机协作开发模式
Vibe Coding并非新工具或框架,而是面向现代开发者的一种轻量级人机协作范式,其本质是通过压缩决策链路、消除抽象冗余、强化即时反馈,重建代码与物理世界之间的确定性连接。它根植于心流(Flow State)心理学,但聚焦可落地的操作纪律:9秒反馈环、单点穿透式开发、零配置启动。该模式天然适配一人团队项目开发实战,尤其能缓解过度工程化、感官脱节与信息过载三大典型困境。实践中不依赖MCP协议或Skill封装,而回归终端命令、原生API调用与物理验证——真正支撑它的,是节奏感、低摩擦与单点穿透这三大热词所指向
如何使用tinyalas接口从usb录音的同时从扬声器播放
3、 以上步骤确认完后,就可以修改tinyhostless.c程序,tinyhostless的本质就是边pcm_read(),边pcm_write();但原本tinyhostless只支持对同一声卡进行操作,所有需要修改其代码,改成录音和播放可支持不同声卡,如果是模拟声卡,有回环测试,可以实现边录边播放,但涉及USB声卡时,就没有现场的类似功能,有时候客户因为硬件特殊性,会有从USB录音的同时从扬声器播放出来的需求,本文简要描述如何使用tinyalsa接口实现该需求;
出现 Error:Unable to access jarfile xxxx\target\nacos-server.jar 解决方法
Nacos中的 2.x执行步骤如上,如果需要安装下载1.x版本,执行该步骤之后 自动更新下载的是2.x版本 对此如果需要下载安装1.x的版本,可通过如下连接(windows版本)
499



被折叠的 条评论
为什么被折叠?



