当尝试执行批量更新时,我收到无效的JSON有效负载错误;并尝试对JSON进行字符串处理会产生“缺少documentId”错误。问题不是OAuth,令牌或文档范围,因为它们都是正确的并且可以正常工作(作用域已从示例的只读更改为整个文档范围)。
由于在节点上没有Google的新批处理更新API的示例,因此批处理更新一直存在重大问题。在对batchUpdate构造函数进行一些故障排除之后,我将问题范围缩小到了(可能是)API url构造函数的一个更大的问题,或者我的语法错误了(或两者兼而有之。)或者我缺少为API调用创建适当的对象的步骤(没有用于这些任务的文档)
根据Google节点快速入门指南成功获取文档后的回调(主要是)
let offset = startIndex + 12
let updateObject = {
documentId:doc_id,
requests:
[{
insertTextRequest :
{
text : 'John Doe',
location : {
index : offset
}
}
}]
}
docs.documents.batchUpdate(updateObject,function(e,r){
console.log(e)
console.log(r)
}
Google API响应
'Invalid JSON payload received. Unknown name "requests[insertText][location][index]": Cannot bind query parameter. Field \'requests[insertText][location][index]\' could not be found in request message.\nInvalid JSON payload received. Unknown name "requests[insertText][text]": Cannot bind query parameter. Field \'requests[insertText][text]\' could not be found in request message.',
domain: 'global',
reason: 'badRequest' } ] }
尝试JSON.stringify(updateObject)-截断后响应
Error: Missing required parameters: documentId
at node_modules\googleapis-common\build\src\apirequest.js:114:19
at Generator.next (<anonymous>)
我的最佳猜测是,为了使API正确编码JSON对象以使请求成功,需要发生某种Google巫术魔术。
答案 0 :(得分:1)
此修改如何?
insertTextRequest
的属性修改为insertText
。updateObject
,请使用resource
的属性放置请求正文。let offset = startIndex + 12;
let updateObject = {
documentId: doc_id,
resource: {
requests: [{
"insertText": {
"text": "John Doe",
"location": {
"index": offset,
},
},
}],
},
};
docs.documents.batchUpdate(updateObject, function(e, r) {
if (e) {
console.log(e);
} else {
console.log(r.data);
}
});
INVALID_ARGUMENT
的错误和消息“无效的请求[0] .insertText:索引###必须小于引用段的末尾索引##”。例如,请尝试将index
修改为1
。https://www.googleapis.com/auth/documents
的范围,并且已启用Docs API。如果我误解了你的问题,我表示歉意。