@前端

動態 列表
@jianer

無感刷新token解決方案

在你的 axios 封裝文件中,你需要兩個外部變量來管理狀態: // 標記是否正在刷新 token 的“鎖” let isRefreshing = false; // 存儲因 token 失效而掛起的請求的“隊列” let requestQueue = []; 請求攔截器 (Request Interceptor) 它的任務很簡單:在每個請求發出去之前,都帶上當前的 token

jianer 頭像

@jianer

昵稱 健兒

@jianer

從一個請求封裝的“死循環”Bug,我學到了什麼?—— 深入剖析 async/await 與錯誤處理 前言:那個讓我頭疼的下午

我們都曾經歷過這樣的下午:一個看似邏輯嚴密的模塊,在實際運行時卻表現得像個失控的野獸。我的故事,就從一個本應“智能”處理登錄和 Token 刷新的 ajax 請求封裝函數開始。 我希望它能在接口返回 400(需要登錄)或 4_01(Token 失效)時,自動完成登錄或刷新 Token,然後再重新發起剛才失敗的請求。然而,它卻在某些情況下陷入了可怕的無限循環,瘋狂轟炸着我的服務器。 起初

jianer 頭像

@jianer

昵稱 健兒

@silkide

前端數據拷貝簡史

本來是自己想了解下js中關於零拷貝的內容,順藤摸瓜瞭解了下相關歷史演進,便有了這篇文章。雖説是數據拷貝歷,但其中也夾雜了大量關於Ajax和SPA的歷史,也算是順着拷貝這條藤摸到的瓜,所以有點跑題。希望大家能開心吃瓜,如果有任何紕漏和補充,請在評論區暢所欲言,我們一起完善這段有趣的歷史。 一、為什麼我們需要拷貝? 小明已經有了一個羅技G102鼠標,但是他又買了一個,請問為什麼?答:因為怕第一個壞掉了

silkide 頭像

@silkide

昵稱 Silkide

@cryptorzz

東南亞日本股票數據API對接文檔

概述 本文檔詳細説明如何對接StockTV全球股票API中的日本股票數據。日本股票市場是全球重要金融市場之一,包含東京證券交易所(TSE)等多個交易所。 認證方式 所有API請求都需要在URL參數中包含API Key: key=您的API密鑰 基礎信息 日本國家ID: countryId=35 API端點 1. 日本股票市場列表 獲取日本股票市場列表,支持分頁查詢。 請求示例:

cryptorzz 頭像

@cryptorzz

昵稱 CryptoRzz

@sheng_c

使用腳本一鍵部署私有化在線客服系統

隨着私域運營越來越重要,100%安全可控的私有化部署在線客服系統也成為了許多商家的剛需。本文向您介紹如何簡單快速的在10分鐘時間內輕鬆部署一套穩定好用的私有化在線客服系統。 我們使用業界老牌的私有化部署客服系統升訊威。 以下命令腳本可在 Ubuntu 裸機中完成一鍵安裝部署。 通過此命令腳本安裝則 無需 再按文檔目錄要求手工安裝 Nginx、MySQL、配置站點等。安裝腳本運行完畢後,參閲

sheng_c 頭像

@sheng_c

昵稱 曹旭升

@good_luck_5e9ba6e9aa054

2026年Vue3 Admin前端框架開發技術深度解析

2026年Vue Admin前端框架開發技術深度解析 一、技術趨勢與演進方向 1.1 構建工具革命 2026年,Vite 6已成為默認構建工具,其基於Rust的Rolldown引擎使構建速度較Webpack提升300%。配合模塊聯邦(Module Federation)特性,可輕鬆實現微前端架構,例如將商品管理、支付系統拆分為獨立子應用動態加載。Vue Admin Better已實現通過單一配置項

@tuzixiansen_63d4d65909d62

uniapp微信小程序請求麥克風授權

首先找到manifest.json文件,開啓微信小程序授權請求 "permission": { "scope.record": { "desc": "需要使用麥克風進行語音錄製" // 此處描述需符合微信規範 } } 然後通過uni.getSetting查詢麥克風授權狀態 麥克風的scope值為scope.record,如果已授權則直接返回,若

tuzixiansen_63d4d65909d62 頭像

@tuzixiansen_63d4d65909d62

昵稱 兔子先森

@tuzixiansen_63d4d65909d62

uniapp微信小程序長按功能

現在要實現一個按鈕長按的功能,大概有如下幾個要點: 1、長按按鈕,按鈕覆蓋整個輸入框 2、長按的過程中移動手指,判斷手指移動的位置是否在按鈕內 3、長按鬆開,按鈕還原 按鈕結構如下: view id="audio-full" :class="[ 'audio-full', isLongpress 'touch-longpress'

tuzixiansen_63d4d65909d62 頭像

@tuzixiansen_63d4d65909d62

昵稱 兔子先森

@tuzixiansen_63d4d65909d62

流式輸出-建立SSE連接-01

什麼是流式輸出 流式輸出,也稱為流式傳輸,指的是服務器持續地將數據推送到客户端,而不是一次性發送完畢。這種模式下,連接一旦建立,服務器就能實時地發送更新給客户端。 人話講就是跟接口建立連接,只要接口不斷開,服務器就能實時的把信息發送給前端,AI流式輸出中,接口每次返回一小段話,前端拿到後流式渲染即可。 有點類似websocket,但SSE是單向的 fetch-event-source

tuzixiansen_63d4d65909d62 頭像

@tuzixiansen_63d4d65909d62

昵稱 兔子先森

@tuzixiansen_63d4d65909d62

流式輸出-流式渲染-02

現在有很多框架實現了流式渲染,我在這裏例舉幾個: React框架 ● Ant-Design-X Vue框架 ● Element-Plus-X ● MateChat (PC/H5雙端兼容) H5移動端 ● ChatUI-React 這裏以MateChat框架做示例,MateChat是一個獨立的AI對話組件,不與其它UI框架關聯,可直接引入項目使用。 一般的流式渲染分兩種

tuzixiansen_63d4d65909d62 頭像

@tuzixiansen_63d4d65909d62

昵稱 兔子先森

@tuzixiansen_63d4d65909d62

一個手寫的vue3錄音組件,支持錄音波紋、外觀自定義調節

該組件有兼容問題,MAC上不可用,需注意,這裏僅用來做記錄,如需音頻功能,可使用Recorder.js,方案很成熟。 組件如下: template div class="container" ref="container" canvas id="visualizer" ref="canvas"/canvas /div /template script setup lang=

tuzixiansen_63d4d65909d62 頭像

@tuzixiansen_63d4d65909d62

昵稱 兔子先森

@tuzixiansen_63d4d65909d62

前端recorder-core實時錄音並繪製波形,blob常規數據格式

npm:https://www.npmjs.com/package/recorder-core npm install recorder-core 這裏是常規錄音,每次結束後返回完整音頻blob,中間返回,並且結束後關閉音頻錄製並清空緩存 下面是一個vue3+ts+arco.design的案例,直接複製到項目中運行即可 template div class="snow-page"

tuzixiansen_63d4d65909d62 頭像

@tuzixiansen_63d4d65909d62

昵稱 兔子先森

@tuzixiansen_63d4d65909d62

前端H5錄音實時幀回調-波形配置- Recorder.js

在H5端我們必須使用canvas作為容器來顯示波紋效果,這在官網上有詳細説明 這裏我定義了一個waveConfig變量用作波形的配置,具體的參數下文寫的很詳細,需要注意一點,compatibleCanvas參數綁定的是canvas容器,而且得是在canvas掛載後才能綁定。 // 創建音頻可視化圖形繪製對象 waveConfig.compatibleCanvas = recw

tuzixiansen_63d4d65909d62 頭像

@tuzixiansen_63d4d65909d62

昵稱 兔子先森

@tuzixiansen_63d4d65909d62

PC瀏覽器端-PCM錄音+實時幀回調+流式上傳-Recorderjs

看到這裏的時候一定要理解並運行上文的《前端H5錄音實時幀回調-波形配置- Recorder.js》,這樣對Recorder有個概念。 1、通過onProcess回調可實現錄音的實時處理,onProcess的buffers參數內容為pcm數組(16位 LE小端模式 Little Endian),能直接流式的將數據進行上傳; 2、onProcess內的buffers參數為所有的PCM集合,

tuzixiansen_63d4d65909d62 頭像

@tuzixiansen_63d4d65909d62

昵稱 兔子先森

@tuzixiansen_63d4d65909d62

PC瀏覽器端-MP3錄音+實時幀回調+流式上傳-Recorderjs

看到這裏的時候一定要理解並運行上文的《前端recorder-core實時錄音並繪製波形,blob常規數據格式》,這樣對Recorder有個概念。 在創建錄音對象的時候有一個takeoffEncodeChunk回調,該回調為實時編碼環境,會接管編碼器輸出。 當編碼器實時編碼出一塊有效的二進制音頻數據時實時回調此方法,也就是説每次獲取到有效的二進制音頻數據takeoffEncodeChun

tuzixiansen_63d4d65909d62 頭像

@tuzixiansen_63d4d65909d62

昵稱 兔子先森

@tuzixiansen_63d4d65909d62

uniapp微信小程序AI對話SSE流式輸出

微信小程序版本,主要針對AI對話的流式輸出,這裏主要有兩個要點 **1、如何流式渲染 2、如何建立SSE連接** 我們先從看得見的渲染開始着手,能渲染出來後再建立SSE做流式輸出 流式渲染 這裏使用uniapp插件市場的:zero-markdown-view 插件市場搜索直接下載導入到項目裏就可以用了 頁面使用: zero-markdown-view :theme-c

tuzixiansen_63d4d65909d62 頭像

@tuzixiansen_63d4d65909d62

昵稱 兔子先森

@tuzixiansen_63d4d65909d62

uniapp自動滾動到底,上滑取消置底-錨點滾動

主要通過scroll-view組件來實現,比手動js獲取高度、判斷啥的更方便,而且官方支持 滾動到底 實現思路,通過錨點滾動實現,官方支持 view id="chat-main" scroll-view class="chat-main-inner" :lower-threshold="15" :scroll-into-view="targetId" scroll-y="t

tuzixiansen_63d4d65909d62 頭像

@tuzixiansen_63d4d65909d62

昵稱 兔子先森

@tuzixiansen_63d4d65909d62

VueZone-H5開發模板的一些常用功能

官網:https://vue-zone.github.io/docs/ github:https://github.com/vue-zone/vue3-vant-mobile 這是一個開源的vue3+vite的H5模板,多端設備兼容方式為 px - vw 和 rem 已接入過項目,親測好用,沒有過多配置,拉代碼啓動就能用了。 你可以把它當成一個已經搭好的架子,你只需要往裏面

tuzixiansen_63d4d65909d62 頭像

@tuzixiansen_63d4d65909d62

昵稱 兔子先森

@tuzixiansen_63d4d65909d62

uni.connectSocket與@microsoft/signalr連接

之前做web頁面的時候,前後端用的@microsoft/signalr庫做長連接,現在微信小程序不支持signalr庫的直接使用,uniapp微信小程序的websocket長連接只能用uni.connectSocket,所以我們要用uni.connectSocket實現與signalr庫的長連接。 頁面結構 view button @click="onLink"啓動連接/bu

tuzixiansen_63d4d65909d62 頭像

@tuzixiansen_63d4d65909d62

昵稱 兔子先森

@tuzixiansen_63d4d65909d62

uni.connectSocket真機調試報錯open fail:_code:20,_msg:Invalid HTTP

在微信開發者工具上uni.connectSocket的連接是正常的,一旦到真機預覽就連接報錯了,不管是真機預覽還是體驗版真機都會報錯。 真機報錯如下:open fail:_code:20,_msg:Invalid HTTP 最後在查找各種資料發現websocket的url不能包含特殊字符,必須轉碼才可以 比如我下面在url上拼接了一個token,這個token可能包含特殊字符(

tuzixiansen_63d4d65909d62 頭像

@tuzixiansen_63d4d65909d62

昵稱 兔子先森