请求POST/GET时遇TypeError:无法读取undefined的'func'属性
Google Apps Script Web应用请求报错排查解决
问题现状
此前正常运行的Google Apps Script Web应用,现在发起POST或GET请求时触发错误:TypeError: Cannot read property 'func' of undefined (line 12, file "Code")
错误原因
核心问题出在ManageSheet函数的第一行代码:
var e = JSON.stringify(e);
这行代码把传入的请求参数对象e直接转成了字符串类型,后续代码试图访问e.parameter.func时,字符串对象根本没有parameter属性,因此抛出"无法读取undefined的'func'属性"的错误。
修复方案
删掉覆盖原始参数对象的代码,如需记录日志,先对参数对象做字符串化再日志输出,不要修改原始的e对象。修复后的完整代码如下:
function doGet(e) { return ManageSheet(e); } function doPost(e) { return ManageSheet(e); } function ManageSheet(e) { // 先记录请求参数,不覆盖原始e对象 Logger.log(JSON.stringify(e)); // 读取全部记录 if (e.parameter?.func == "ReadAll") { var ss = SpreadsheetApp.getActive(); var sh = ss.getSheets()[parseInt(e.parameter.SN)-1]; var rg = sh.getDataRange().getValues(); var outString = ''; for(var row=0 ; row<rg.length ; ++row){ outString += rg[row].join(',') + '\n'; } return ContentService.createTextOutput(outString).setMimeType(ContentService.MimeType.TEXT); } // 创建新记录 if (e.parameter?.func == "Create") { var ss = SpreadsheetApp.getActive(); var sh = ss.getSheets()[parseInt(e.parameter.SN)-1]; var data = [ Utilities.formatDate(new Date(), "GMT+3:30", "MM/dd/yyyy"), Utilities.formatDate(new Date(), "GMT+5:30", "HH:mm:ss"), e.parameter.A, e.parameter.B, e.parameter.C, e.parameter.D, e.parameter.E, e.parameter.F, e.parameter.G, e.parameter.H, e.parameter.I, e.parameter.J, e.parameter.K, e.parameter.L, e.parameter.M, e.parameter.N, e.parameter.O, e.parameter.P, e.parameter.Q, e.parameter.R, e.parameter.S, e.parameter.T, e.parameter.U, e.parameter.V, e.parameter.W, e.parameter.X, e.parameter.Y, e.parameter.Z ]; sh.appendRow(data); return ContentService.createTextOutput(JSON.stringify(data)); } // 处理未匹配的请求,避免无返回值 return ContentService.createTextOutput("无效请求").setMimeType(ContentService.MimeType.TEXT); }
额外优化说明
- 增加了可选链操作符
?.,避免当e.parameter不存在时再次触发报错 - 修复了Create分支的返回值问题:原代码直接返回数组会被强制转成混乱的字符串,改为用
JSON.stringify格式化后返回,格式更规范 - 新增默认返回逻辑,处理未匹配到
func参数的请求场景
内容的提问来源于stack exchange,提问作者Mostafa Karami
相关产品推荐
相关产品推荐

