在微信小程式裡,與背景伺服器互動的主要接口函數是 wx.request()
,用于發起 HTTPS 網絡請求。其重要性不言而喻。然而,卻經常遇到請求失敗的問題,筆者特意谷歌"wx.request 請求失敗",可以搜尋到很多相關的文章,下面列出一些:
- wx.request 失敗| 微信開放社群
- 微信小程式 wx.request 請求失敗- SegmentFault 思否
- 小程式部分機型小程式使用者無法發起 wx.request 請求,網絡錯誤問題 ...
- wx.request()失敗,request:fail。_微信小程式開發
- request:fail 合集(各種 request:fail 問題)
- 微信小程式之 wx.request:fail 錯誤排查- 簡書
有些事開發時候遇到,有些是産品上線後遇到。線上的情況比開發和測試的時候複雜的多,失敗的原因可能各種各樣。既然測試無法 100%保證上線不會出問題,我們唯一要做的就是及時發現和快速響應。
微信小程式運維中心提供了錯誤日志記錄,但功能還是比較有限。隻有簡單的統計和錯誤展示功能,而往往僅僅靠報錯資訊是無法清晰了解錯誤成因的。這個時候使用強大的第三方監控服務就很有必要了。

小程式 Demo
我們使用一款由
jectychen開發的
wechat-v2ex來做示範,v2ex 資料 api 基本上使用了 samuel1112 的倉庫
v2er裡封裝的方法。
其運作效果如下:
最左側本來應該有頭像的,可能由于防盜鍊的原因沒有顯示出來。
有時候一個微信小程式可能會用到多個第三方服務,從多個域名擷取資料。以下兩種情況都值得注意:
- 某些接口做了更新沒有及時推送通知,該接口的調用就會失敗;
- 服務不夠穩定,接口的傳回某一時段特别慢;
- 某些終端使用者的資料不符合導緻接口失敗。
是以産品上線以後,對接口的調用進行監控是很有必要的。
接入監控
Fundebug 的微信小程式錯誤監控插件支援監控 HTTP 請求錯誤:
- 當請求傳回的 statusCode 不是 2xx 或者 fail 回調函數被觸發的時候,Fundebug 的小程式監控插件會捕獲該錯誤并發送到伺服器。
- 如果接口請求耗時過長,我們也可以配置
來監控。httpTimeout
要使用 Fundebug 監控,你需要去
Fundebug網站新增賬號并建立一個微信小程式監控項目,然後按照提示接入插件。你需要下載下傳微信小程式監控的 JS 腳本放入到自己的項目中,然後引入并通過
fundebug.init()
函數作必要的配置。
var fundebug = require("./utils/fundebug.1.3.1.min.js");
fundebug.init({
apikey: "YOUR-API-KEY",
monitorHttpData: true,
httpTimeout: 2000,
monitorMethodCall: true,
monitorMethodArguments: true,
setSystemInfo: true,
setUserInfo: true,
setLocation: true
});
插件預設會監控 HTTP 請求錯誤,并上報 Header 部分的資訊,我們無需做配置。為了友善 Debug,我們配置
monitorHttpData
來記錄 body 部分的資訊;我們将
httpTimeout
設定為 2000 毫秒,超過該時長的請求會被上報到伺服器。
Request:fail 錯誤
為了示範
wx.request
傳回 request:fail 錯誤,我特意将
utils/api.js
中的
HOST_URI
改錯。
var HOST_URI = 'https://www.w2ex.com/api/';
然後儲存運作。Fundebug 收到上報的錯誤,該請求花了 7072 毫秒,然後傳回請求失敗。
通過使用者行為可以更加清楚地了解整個小程式的運作過程:
404 錯誤
這次,我将擷取最新話題的接口做點更改,故意将
latest
寫出
lastest
:
var LATEST_TOPIC = 'topics/lastest.json';
儲存運作,Fundebug 捕獲該錯誤并上報到伺服器:
參數錯誤
擷取某一個話題詳情的時候,應該傳入對應的 id。如果 id 是 null、undefined、或則本來是數字我們傳入字元串,看看結果怎麼樣。
下圖可知當我們将參數 id 設為
undefined
的情況下,接口傳回 404。并傳回消息:
{
"message": "Object Not Found",
"status": "error"
}
關于Fundebug
專注于JavaScript、微信小程式、微信小遊戲、支付寶小程式、React Native、Node.js和Java線上應用實時BUG監控。 自從2016年雙十一正式上線,Fundebug累計處理了10億+錯誤事件,付費客戶有陽光保險、核桃程式設計、荔枝FM、掌門1對1、微脈、青團社等衆多品牌企業。歡迎大家免費試用!
版權聲明
轉載時請注明作者 Fundebug以及本文位址:
https://blog.fundebug.com/2019/07/01/monitor-wx-request-fail/