NodeJS 尝试通过Google云端硬盘API创建权限时出现“权限类型字段为必填字段”错误

svmlkihl  于 2022-12-29  发布在  Node.js
关注(0)|答案(2)|浏览(150)

我改编了Google Drive API快速入门中的代码,用于Node.js找到here,尝试在Google Drive中的现有文件上创建新权限。
不管我在代码中做了什么修改,我总是得到相同的响应The permission type field is required,即使我已经通过resource指定了它,正如npm googleapisclient library的文档和我找到的其他示例中提到的那样。
这是行不通还是我错过了什么明显的东西?

更新权限的代码

function updateFilePermissions(auth) {

  var drive = google.drive({
    version: 'v3',
    auth: auth
  });

  var resourceContents = {
    role: 'writer',
    type: 'user',
    emailAddress: 'user@example.com'
  };

  drive.permissions.create({

    resource: resourceContents,
    fileId: aValidFileId,
    sendNotificationEmail: false,
    fields: 'id',

  }, function(err, res) {

    if (err) {

      // Handle error...
      console.error(err);

    } else {

      console.log('Permission ID: ', res.id);

    }

  });

}

来自Google云端硬盘API的响应

code: 400,
errors: 
 [ { domain: 'global',
     reason: 'required',
     message: 'The permission type field is required.',
     locationType: 'other',
     location: 'permission.type' } ]
atmip9wb

atmip9wb1#

对于任何还在寻找答案的人来说,它需要像这样的格式:

{
          fileId: fieldID, // String
          resource: {
            role: putRoleHere, //String
            type: putTypeHere //String
          }

Google的API正在使用Axios作为HTTP客户端,因此当您使用他们的方法时,它将自动字符串化:)

ddhy6vgd

ddhy6vgd2#

看起来docs生成的这个API的示例代码是无效的。通过分析devtools网络中传出的请求和一些猜测,我发现resource字段必须与fileId一起放置在根级别。

response = await gapi.client.drive.permissions.create({
    fileId: "18TnwcUzeBGCHpr7UWW-tKjf2H2RKOKx2V2vaQiHR-TA",
    emailMessage: "huj sosi",
    sendNotificationEmail: false,
    role: 'writer',
    type: 'user',
    emailAddress: 'user@example.com',
})

考虑到文档不鼓励使用特定版本的the library,我想只是在某个时候有一个随机的破坏性变化,导致文档中的不一致。

相关问题