如何发送更新请求正文?

时间:2019-04-01 22:38:42

标签: node.js google-sheets-api

我正在尝试使用nodejs googleapis包将数据输入到google工作表中。我正在使用它们给您提供的快速入门代码作为样板,并且我正在努力寻找sheets.spreadsheets.values.update函数中“请求”对象的正确格式。

我本以为这很容易弄清楚,但是文档尚不清楚且矛盾。

这是google sheets api documentation

中电子表格.values.update页面上的node.js选项卡上的内容。

根据此页面,“请求”对象应如下所示:

var request = {
    // The ID of the spreadsheet to update.
    spreadsheetId: 'my-spreadsheet-id',  // TODO: Update placeholder value.

    // The A1 notation of the values to update.
    range: 'my-range',  // TODO: Update placeholder value.

    // How the input data should be interpreted.
    valueInputOption: '',  // TODO: Update placeholder value.

    resource: {
      // TODO: Add desired properties to the request body. All existing properties
      // will be replaced.
    },

    auth: authClient,
  };

范围,电子表格ID和valueInputOption都非常简单。我没有那些问题。但是,“资源对象”过于模糊。我不知道这是什么意思。在页面右侧边栏的小示例请求中,您可以编辑“请求正文”以为其提供此请求中的所有值,然后编辑一个 values 属性,该属性是一个嵌套数组想要更新的值中的哪一个有效,但是它并没有显示您需要输入到节点API中的实际输入(这很有意义,因为它不是特定于节点的)

我考虑过将“ values”属性放在“ resources”对象中,该对象只是像我期望的那样具有嵌套数组。这是行不通的。它所做的只是返回TypeError: Cannot read property 'length' of undefined。如果您将其从“资源”对象中解包,并仅发送值作为其自身的属性,则会得到Error: Invalid JSON payload received. Unknown name "values": Cannot bind query parameter. Field 'values' could not be found in request message.

此外,这行之后的所有内容,auth: authClient均已弃用的代码,现在在创建工作表对象时完成了身份验证,这给了我一个提示,即正在做出尚未反映的更改在文档的所有部分中。

我认为googleapis程序包本身的github文档上可能会有更好的信息,该文件确实具有追加到电子表格的示例代码,其中的一个名为requestBody的属性像这样使用:

const res = await sheets.spreadsheets.values.append({
    spreadsheetId,
    range,
    valueInputOption: 'USER_ENTERED',
    requestBody: {
      values: [
        ['Justin', '1/1/2001', 'Website'],
        ['Node.js', '2018-03-14', 'Fun'],
      ],
    },
  });

它不包含工作表api文档页面上的示例中的resources对象,并且当您尝试运行它时,它不起作用,用Error: Invalid JSON payload received. Unknown name "requestBody[values]": Cannot bind query parameter. Field 'requestBody[values]' could not be found in request message.

在这一点上,我觉得最近关于库和/或api的某些更改已经使本文档变得毫无用处,因此,我转向堆栈溢出来查找完成的某人,任何人最近,可以为我提供准确的资源。谢谢。

1 个答案:

答案 0 :(得分:0)

好的,因此,最准确的文档位于here上。如果以这种方式进行设置,即使它抛出错误,它也可以工作。据我所知,谷歌为请求和回调提供了一个try / catch,因此回调引发了错误,并且作为响应,谷歌调用了带有错误的回调,并假设错误来自于其他地方。 try语句,例如在响应中。 Google,聚在一起。这太可怕了。