You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Node.js调用Google Data Transfer API转移所有权时遇资源字段缺失错误

解决Data Transfer API调用时"Missing required nested field: resource"错误

错误原因

Google APIs Node.js客户端库对POST/PUT类型的API调用有固定格式要求:必须将请求体数据嵌套在resource字段中传递,而非直接传入请求对象。你的代码直接把requestBody传给了transfers.insert方法,不符合库的参数规范,因此触发了"Missing required nested field: resource"错误。

另外,你使用项目编号作为applicationId是错误的:Data Transfer API中的applicationId是Google预定义的服务ID,而非你自己的GCP项目编号。Google Drive对应的正确applicationId是2620157。

修正后的代码

const auth = await getAuth();     // 已确认正常工作的OAuth2对象
const transferClient = google.admin({ version: 'datatransfer_v1', auth });

const requestBody = {
  oldOwnerUserId: "107351012895020643169", // 注意:用户ID需以字符串传递(避免大数精度丢失)
  newOwnerUserId: "116959854431469063864",
  applicationDataTransfers: [{
    applicationId: "2620157", // Google Drive的官方applicationId
    applicationTransferParams: [
      {
        key: 'RELEASE_RESOURCES',
        value: ['TRUE'],
      },
      {
        key: 'PRIVACY_LEVEL',
        value: ['PRIVATE', 'SHARED'], // 此处无需大括号,直接传递数组元素
      },
    ],
  }],
};

try {
  // 关键修正:将请求体嵌套在resource字段中
  serverResponse = await transferClient.transfers.insert({
    resource: requestBody
  });
} catch (e) {
  console.log('ERROR driveDriveFilesAndFoldersOwnership:', e);
}

额外注意事项

  • 用户ID建议以字符串类型传递:JavaScript对超大整数的精度处理可能导致ID失真,用字符串可以避免这个问题。
  • PRIVACY_LEVEL的value字段无需包裹大括号,直接传递['PRIVATE', 'SHARED']即可。
  • 确保授权的OAuth2账号拥有超级管理员权限:Data Transfer API仅允许域管理员发起所有权转移操作。

内容的提问来源于stack exchange,提问作者spodell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 10:46:11