2025年7月21日 星期一

[Google教學] 如何偵錯帶有參數的 Google App Script (doGet)?用自訂函式模擬參數,實現單步偵錯

 


在使用 Google App Script (GAS) 開發網頁應用程式時,最常遇到的挑戰之一就是如何有效地對 
doGet(e)  doPost(e) 這類由網頁請求觸發的函式進行偵錯。因為這些函式依賴一個由 Google 自動傳入的事件物件 e,我們無法直接在 Apps Script 編輯器中點擊「執行」來測試,否則會立即遇到錯誤。

傳統的方式是使用 Logger.log() 將變數印出,然後到「執行項目」中查看紀錄。但這種方法不僅效率低落,無法進行中斷點 (Breakpoint) 或單步執行,有時紀錄甚至會延遲或在無痕模式下根本看不到。

今天,我們將介紹一個非常實用且簡單的技巧,讓你能夠像偵錯一般函式一樣,對 doGet(e) 進行完整的中斷點與單步偵錯。

問題情境:為何 doGet(e) 難以偵錯?

doGet(e) 函式的設計是用來接收 HTTP GET 請求。當使用者透過網址訪問你的 GAS 應用時,Google 會將網址上的參數打包成一個事件物件 e,並傳遞給 doGet 函式。

例如,一個典型的 doGet(e) 函式可能長這樣:

Generated javascript
function doGet(e) {
  // 從事件物件 e 中取得名為 'parameter' 的屬性
  var params = e.parameter;
  
  // 從參數中取得 OrderID 和 ShopName
  var OrderID = params.OrderID;
  var ShopName = params.ShopName;
  
  // ... 後續的程式碼邏輯 ...
  
  Logger.log("OrderID=" + OrderID + ", ShopName=" + ShopName); 
  
  // ... 處理資料與回傳結果 ...
}

如果你直接在 Apps Script 編輯器中選擇 doGet 函式並點擊「執行」或「偵錯」,由於沒有實際的網頁請求,事件物件 e 根本不存在,所以 e 會是 undefined。當程式試圖讀取 e.parameter 時,就會立刻拋出錯誤:

TypeError: Cannot read property 'parameter' of undefined

這就是為什麼我們無法直接偵錯的原因。

解決方案:建立一個偵錯專用函式 (Debug Function)

解決這個問題的核心思想是: 函式。

我們可以建立一個新的、專門用於偵錯的函式,例如 debug()。在這個函式裡,我們宣告一個變數,其結構完全模仿真實的事件物件 e

操作步驟如下:

 函式

在你的程式碼檔案 (.gs) 中,加入以下函式:

Generated javascript
function debug() {
  // 1. 宣告一個變數 d,用來模擬事件物件 e
  var d = {
    // 2. 建立一個名為 parameter 的屬性,這是一個物件
    "parameter": {
      "OrderID": "A0002",
      "ShopName": "香純滴雞精"
    }
  };
  
  // 3. 呼叫真正的 doGet 函式,並將我們模擬的物件 d 傳入
  doGet(d); 
}

程式碼說明:

  • 我們建立的物件 d 完美地模擬了 doGet(e) 函式所期望的 e 事件物件結構。

  • d 物件中有一個 parameter 屬性。

  • parameter 屬性本身也是一個物件,裡面包含了你想測試的網址參數,例如 OrderID  ShopName。你可以根據你的需求自由修改這些測試值。

  • 最後,我們呼叫 doGet(d),這樣 doGet 函式在執行時,就能從 d 中成功讀取到 d.parameter.OrderID 等值,就像收到真實的網頁請求一樣。

2. 使用偵錯工具

現在,偵錯流程變得非常簡單:

  1. 在 Apps Script 編輯器的函式選單中,選擇我們剛剛建立的 debug 函式。

  2. 在你想要檢查的程式碼行號旁點擊一下,設定中斷點 (Breakpoint),它會顯示一個藍點。

  3. 點擊「偵錯」(昆蟲圖示),而不是「執行」。

  4. 程式將會執行到你設定的中斷點並暫停。此時,右方的「偵錯工具」面板會顯示所有區域變數的當前值。你可以逐行執行、進入函式或跳出函式,完整地觀察程式的運作流程。

透過這種方式,你可以輕鬆檢查變數的值是否正確、邏輯判斷是否如預期運作,大幅提升開發與除錯的效率。

總結

對於需要接收參數的 doGet(e)  doPost(e) 函式,傳統的 Logger.log 方法既耗時又不直觀。透過建立一個簡單的 debug() 模擬函式,我們可以:

  1. 模擬真實的請求參數,測試各種邊界情況。

  2. 啟用完整的中斷點偵錯功能,可以逐行追蹤程式碼。

  3. 即時查看變數內容,快速定位問題根源。

這個技巧是所有 Google App Script 開發者都應該掌握的實用方法,下次遇到類似問題時,不妨試試看吧!



沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。

[Google教學] 如何偵錯帶有參數的 Google App Script (doGet)?用自訂函式模擬參數,實現單步偵錯

  在使用 Google App Script (GAS) 開發網頁應用程式時,最常遇到的挑戰之一就是如何有效地對   doGet(e)   或   doPost(e)   這類由網頁請求觸發的函式進行偵錯。因為這些函式依賴一個由 Google 自動傳入的事件物件   e ,我們...