使用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
相关产品推荐
相关产品推荐

