GAS - GET不起作用,但POST确实如此

时间:2014-01-29 23:50:26

标签: curl google-apps-script

我的脚本执行正常,当我从编辑器运行脚本时能够从我的电子表格中返回数据,但是当我尝试使用cURL或Postman时它会失败。

能够发出POST来调用doPost(e)并从给定参数向我的电子表格添加额外的行。我希望能够发出一个GET请求来调用我的doGet(e)方法,该方法将我的电子表格行返回为JSON(我验证了doGet在编辑器中的工作原理)。

但是,当我尝试使用cURL或Postman发出GET时,我得TypeError: Cannot call method "getRange" of null.

我很困惑,因为我没有在我的脚本中的 all 处调用方法getRange(),所以我不知道这个错误来自哪里。我将Spreadsheet键和工作表名称硬编码到脚本中进行测试,但仍然会出现同样的错误。

我已部署了该网络应用,以便使用我的Google帐户执行,并允许Anyone, even anonymous访问该脚本。我运行了一个设置功能,用脚本授权我的帐户。

这是我的电子表格中的link

这是我的代码:

function doGet(e) {
var ss = SpreadsheetApp.openById("0AvXqpv9dPoVfdHRzRUkxMS1qVkpwaEJDSk44RXpZUVE");
var sheet = ss.getSheetByName("Clouds");

var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();

var json = JSON.stringify(values);
Logger.log(json);

return json;
};

function doPost(e) {
var ss = SpreadsheetApp.openById("0AvXqpv9dPoVfdHRzRUkxMS1qVkpwaEJDSk44RXpZUVE");
//var sheet = ss.getSheetByName(e.parameter["sheetID"]);
var sheet = ss.getSheetByName("Clouds");

//Logger.log("sheetId: " + e.parameter["sheetID"]);
Logger.log("request: " + e);

//check if sheet exists, if not add sheet
if (sheet == null) {
  Logger.log("Creating new sheet...");
    //inserts sheet with specified ID, updates sheet var, appends a header row and then locks it
    ss.insertSheet(e.parameter["sheetID"]); 
    sheet = ss.getSheetByName(e.parameter["sheetID"]);
    sheet.appendRow(["ID","Coverage","Date", "Time", "Comments", "kWhr", "mL Water"]);
    sheet.setFrozenRows(1); 
}
//Append the 3 inputs to the sheet
//If statement takes care of whether the user is using the GET or POST functions, GET will have different parameter id's

if (e == null || e.parameter["id"] == undefined){
Logger.log("getting data");
return ContentService.createTextOutput("Successful GET");
//doPost(e);
}
else {
Logger.log("Appending row...");
sheet.appendRow([
  e.parameter["id"],
  e.parameter["coverage"],
  e.parameter["date"],
  e.parameter["time"],
  e.parameter["comments"],
  e.parameter["kwhr"],
  e.parameter["ml"]
]); 
}

//Returns a string to be displayed (If nothing is return you get a Google page saying the script worked and nothing was returned)
return ContentService.createTextOutput("Successfully Submitted. You may close the application"); 
}

1 个答案:

答案 0 :(得分:0)

刚刚发现我必须将代码重新发布为不同的版本。现在一切正常。