如何本地除錯微信小程式介面伺服器
微信小程式所訪問的介面路徑需是合法域名且必須為 Https 協議,如果你作為微信小程式的介面伺服器開發者,並且很不幸的接到了一個服務端異常(500)的反饋,你會如何除錯?
一、束手束腳的服務端除錯
若是瀏覽器端開發,還可以通過修改訪問域名,直接連線到本機 Ip,通過本地除錯環境,舒適的查詢問題。但是由於小程式的限制,直連 Ip 已然無用。此時一個低效但是有效的定位問題的路徑為:
- 通過完善的伺服器日誌體系,尋找突破口(完善的日誌體系,就比較重要了)
- 檢查程式碼,尋找潛在的問題原因
- 修改程式碼(或許會增加一些日誌),編譯、部署
- Debug 模式重啟解析了合法域名,且支援 Https 協議的測試伺服器,驗證問題
- 問題解決,大吉大利吃雞;否則,重複...
運氣好的話,花上個一天半天的,問題也就解決了
二、嘗試直連本地的除錯環境
不難發現,問題的本質在於兩點:
- 小程式的介面路徑,必須是合法的域名,不能是 Ip 地址
- 小程式的介面路徑,必須是 Https 協議
第一個灰常簡單,修改 hosts,將 127.0.0.1 繫結到 xxx.xxx.com 上,這裡推薦一個工具,SwitchHosts!,Mac 和 Windows 都有,別再傻傻的手動改 host 檔案了

SwitchHosts!
第二個問題就到了展示真正的技術的時候了(本來支援 Https 協議也不算什麼難事,只是很多時候,這部分都輪不到開發同學解決,所以還是有一定的實操難度),這裡以 Node 為例:
if (envConfig.nodeEnv === 'wechat') { https_options = { key: fs.readFileSync('./.ssl/private.pem'), // 域名證書私鑰 cert: fs.readFileSync('./.ssl/file.crt') // 域名證書公鑰 }; http.createServer(require('redirect-https')()).listen(envConfig.httpPort, () => { logger.info(`HTTP server is now running on port: ${envConfig.httpPort}`); }); // 通過 https 模組啟動 https.createServer(https_options, app).listen(envConfig.httpsPort, () => { logger.info(`HTTPS server is now running on port: ${envConfig.httpsPort}`); }); }
要點:
- 區分 “wechat” 環境啟動是因為,運維同學,早就把伺服器 Https 的訪問給搞定了啦,就不要在你的破程式碼裡重複搞了
- 要拿到域名的SSL證書,這裡的方式就很多樣了,可以用 Let's Encrypt 免費的慢慢搞,但是最簡單最簡單的方式就是直接到阿里雲去買一個免費(買,免費!!!)為期一年的 SSL 證書,像這樣的:
- 基於 Node https 模組啟動服務,Over
三、總結
其實也沒什麼好總結的,但是前面只有兩段,不協調,所以非得總結一句:
直擊問題的本質,各個擊破之~~