我正在尝试使用Apps脚本中的Contentservice创建一个WebdoPost(e)
服务,并能够与Google Apps AdminDirectory服务进行交互
这是我的代码概述。我将此保存为服务器并将其发布为websapp
function doPost(e) {
var data = e.parameter;
var resourceType = data.resourceType;
var method = data.method;
var resource = data.resource;
var resourceParams = resource.parameters;
//other code to work with AdminDIrectory
// return ContentService.createTextOutput(myoutputdata).setMimeType(ContentService.MimeType.JSON);
}
在我使用Apps脚本编写的用于测试Web服务的客户端代码中
function test() {
var jsonData = {
authKey : 'HwZMVe3ZCGuPOhTSmdcfOqsl12345678',
resourceType : 'user',
method : 'get',
resource : {
parameters : {
userKey : '[email protected]'
}
}
}
var url = 'https://script.google.com/macros/s/xyzabc12345678_wE3CQV06APje6497dyI7Hh-mQMUFM0pYDrk/exec';
var params = {
method : 'POST',
payload : jsonData
}
var resp = UrlFetchApp.fetch(url, params).getContentText();
Logger.log(resp);
}
现在,当我尝试e.parameter.resource.parameters
在服务器端阅读时,它给出了错误并显示e.parameter.resource是字符串类型。如何在服务器端读取嵌套对象?看来,它只能识别一级参数。
使用
function doPost(e) {
return ContentService.createTextOutput(JSON.stringify(e.parameter)).setMimeType(ContentService.MimeType.JSON);
您得到回应
"{"authKey":"HwZMVe3ZCGuPOhTSmdcfOqsl12345678","resource":"{parameters={[email protected]}}","method":"get","resourceType":"user"}"
所以看起来它正在将所有嵌套扁平化为一个字符串。在类似问题的注释中,请注意,UrlFetchApp的文档允许有效负载为“它可以是字符串,字节数组或JavaScript键/值映射”,但是我认为这不会扩展到嵌套键/值映射。
如另一个答案中所述,解决方案将是对有效载荷进行字符串化,例如
var params = {
method : 'POST',
payload : {'data':JSON.stringify(jsonData)}
};
我在以字符串形式处理有效载荷时遇到了问题,这就是为什么我使用键值的原因
在服务器端脚本中,您可以使用
function doPost(e) {
var data = JSON.parse(e.parameter.data);
var userKey = data.resource.parameters.userKey;
...
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句