如何修复Apps Script中第62行出现的illegal return statement错误
错误根因
你遇到的illegal return statement报错的核心原因是代码结构错误:func == "Login对应的整段逻辑写在了Authentication函数的外部,属于全局作用域代码,JavaScript不允许在全局作用域直接使用return语句,这就是第62行报错的直接原因。
除此之外你的代码还存在多处可触发运行错误的问题:
- 调用
ss.deleteSheet()时没有传入要删除的临时表对象ts,执行会报错 getValues()方法返回的是二维数组,你直接用getPWD == password、getResult == ""这类比较逻辑永远无法得到预期结果- Create逻辑只在邮箱不存在的分支定义了返回值,邮箱已存在的场景没有返回值,会触发Apps Script运行错误
修复后完整代码
//************************************************************************************** function doGet(e){ return Authentication(e); } function doPost(e){ return Authentication(e); } function Authentication(e){ // Create逻辑 if(e.parameter.func == "Create") { var ss = SpreadsheetApp.openById(e.parameter.ID); var sh = ss.getSheetByName(e.parameter.SH); var rg = sh.getName() + "!" + sh.getDataRange().getA1Notation(); var email = e.parameter.email; var sql = ' "Select B where B=\''+email+'\' " '; var qry = ' =IFERROR(query(' + rg + ',' + sql + '), "")'; var ts = ss.insertSheet(); ts.getRange(1,1).setFormula(qry); var getResult = ts.getDataRange().getValues(); ss.deleteSheet(ts); // 修正二维数组判断逻辑 if (getResult[0][0] ==""){ var data = [e.parameter.fullname, e.parameter.email, e.parameter.password, e.parameter.phone]; sh.appendRow(data); return ContentService.createTextOutput("SUCCESS"); } else { // 补全邮箱已存在的返回值 return ContentService.createTextOutput("EMAIL_EXIST"); } } // 把Login逻辑移到Authentication函数内部 if(e.parameter.func == "Login") { var ss = SpreadsheetApp.openById(e.parameter.ID); var sh = ss.getSheetByName(e.parameter.SH); var email = e.parameter.email; var password = e.parameter.password; var rg = sh.getName() + "!" + sh.getDataRange().getA1Notation(); var sql = ' "Select A,B,C where B=\''+email+'\' " '; var qry = ' =IFERROR(query(' + rg + ',' + sql + '), "")'; var ts = ss.insertSheet(); ts.getRange(1,1).setFormula(qry); var getResult = ts.getDataRange().getValues(); // 修正二维数组取值 var getPWD = ts.getRange(1,3).getValues()[0][0]; var getFullName = ts.getRange(1,1).getValues()[0][0]; // 补全deleteSheet参数 ss.deleteSheet(ts); if(getResult[0][0]!=""){ if(getPWD==password){ return ContentService.createTextOutput(getFullName); } else{ return ContentService.createTextOutput("ERPWD"); } } else { return ContentService.createTextOutput("EMPTY"); } } // 补全其他未知func场景的返回值 return ContentService.createTextOutput("INVALID_FUNC"); } // ********************************************************************************************************
内容的提问来源于stack exchange,提问作者NRG
相关产品推荐
相关产品推荐

