【发布时间】:2020-09-10 00:22:42
【问题描述】:
我有一个包含一组卡片的电子表格,我编写了一个doGet() 函数来随机选择一张,并将其返回给用户。在 Web 浏览器中输入 Web App url 时,结果显示正常。但是,当我尝试通过请求模块发出 HTTP Get 请求时,它会返回:
<!DOCTYPE html><html><head><link rel="shortcut icon" href="//ssl.gstatic.com/docs/script/images/favicon.ico"><title>Error</title><style type="text/css">body {background-color: #fff; margin: 0; padding: 0;}.errorMessage {font-family: Arial,sans-serif; font-size: 12pt; font-weight: bold; line-height: 150%; padding-top: 25px;}</style></head><body style="margin:20px"><div><img alt="Google Apps Script" src="//ssl.gstatic.com/docs/script/images/logo.png"></div><div style="text-align:center;font-family:monospace;margin:50px auto 0;max-width:600px">We're sorry, a server error occurred while reading from storage. Error code INTERNAL.</div></body></html>
提取的错误信息是:
很抱歉,从存储读取时发生服务器错误。错误代码内部。
我用谷歌搜索了这个错误代码,但没有人有相同的“错误代码内部”结尾,而且大多数是关于其他用户的。这是我的doGet函数和请求函数
Google Apps 脚本:
function doGet(request){
var requestType = request.parameter.type
if(requestType == "random_card"){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var entriesL = sheet.getLastRow() - 1;
var cardNum = getRandomInt(entriesL);
var card = SpreadsheetApp.getActiveSheet().getRange(2 + cardNum, 2).getValue();
var set = SpreadsheetApp.getActiveSheet().getRange(2 + cardNum, 1).getValue();
var output = '{"card":"' + card + '","cardSet":"' + set + '"}';
Logger.log(output)
return ContentService.createTextOutput(output);
}
}
Node.js
function randomCard(){
var info;
request.get('{url here}?action=get&type=random_card',function(err,res,body){
console.log(body)
info = JSON.parse(body);
});
return info;
}
【问题讨论】:
-
@OlegValter 所以如果我理解这一点,我需要使用 SpreadsheetApp.openById 而不是 SpreadsheetApp.getActiveSpreadsheet。使用它作为 ss 的值。但是,这样做会导致不同的错误。 " 异常:在对象 SpreadsheetApp 上获取方法或属性 openById 时出现意外错误。"
-
是的,这应该足够了。该错误表示权限错误(因为您在外部调用 webapp - 尽管您之前应该已经获得权限,因为要求与
getActiveSpreadsheet相同) - 尝试在脚本编辑器中打开 web 应用程序,运行函数质疑并授权。如果您已经这样做了,请检查网络应用程序是否配置为“以我的身份”运行(如果您同意的话)或考虑切换到 Sheets API -
@OlegValter 该应用程序设置为以我身份运行,我已授予权限,从编辑器启动 doGet 函数没有问题。从脚本编辑器手动运行时出现相同的错误。我正在使用开发路径进行测试。
-
我拥有这张表,没有其他手动分享,但任何知道链接的人都可以查看(所以我可以向我认识的人展示)。脚本绑定到工作表。我现在就做实验。
-
@OlegValter 感谢您的所有帮助,我在某些地方做了一些更改,并且两端似乎一切正常。我会继续标记答案。再次感谢您抽出宝贵时间帮助我! :)
标签: node.js google-apps-script node-request server-error