我目前遇到了Google Drive API的问题(通过Node.js googleapis包使用,googleapis.google.drive) 当我使用drive.list()函数时,它总是返回所有的子代,recursively,所以我得到所有的子代,而不仅仅是所有的子代.除此之外,每当我将drive.get()fields参数中指定的"Parents"一起使用时,它总是只返回一个父项,除非我筛选了特定的父项,否则它返回的父项始终是根ID.

这样,如果不分别 for each 文件夹调用一组API,我甚至无法在 node 中创建一个适当的文件树,我不确定我是否只是做错了什么,或者API是否仅仅是如此有限.有没有办法真正得到直接的父母/子元素?

我遇到的例子:

const drive = // in here I have my authorised googleapis.google.drive instance

drive.files.list({
    q: `'${rootid}' in parents`,
    fields: `files(id, name, parents)`
})

我的文件组织 struct 如下所示:

"root"
 - "test" (folder, located in root)
  - "test.txt" (txt file, located in test)

上面的代码示例列出了测试文件夹和test.txt文本文件,而且不仅列出了直接的子文件夹(在本例中只列出了文件夹).

此外,(使用相同的文件 struct )获取文件的父级还有一个问题,代码如下:

drive.files.get({
    fileId: someFileId,
    fields: `parents`
})

然而,这似乎总是返回根文件夹的id,除非我在q参数中指定了父文件夹,在这种情况下,它只返回我放在q参数中的父文件夹的id,而不返回任何其他父文件夹的id.这使得文件的实际父文件是什么变得非常不清楚.

我该如何处理这两个问题呢?

如果我需要在我的问题中添加任何信息,请告诉我, 感谢您的阅读!

对于我的情况,上面的大小写不够具体,以下是我的代码的相关部分的直接副本:

const { google } = require('googleapis')
const drive = google.drive({
    version: `v3`,
    auth: driveClient,
})

const listFolders = async (foldersOnly = true, parent = `root`) => await drive.files.list({
    q: `'${parent}' in parents ${foldersOnly ? `and mimeType='application/vnd.google-apps.folder'` : ``}`,
    fields: `nextPageToken, files(id, name, parents)`,
})

// actually call the functions
listFolders(false).then((r) => console.log(r?.data?.files)).catch(console.log) // logs result 1
listFolders(false, `1MheLbFrr2LIn_KKa7XHDGvw1NVKIWCvY`).then((r) => console.log(r?.data?.files)).catch(console.log) // logs result 2
drive.files.get({
    fileId: `1eRm-efvklMQcsSggdjorOgsWwmeQ07pu`,
    fields: `parents`,
}).then((r) => console.log(r.data)).catch(console.log) // logs result 3

Results (log):
Result 1:
Result 1
Result 2:
Result 2
Result 3:
Result 3

推荐答案

由于我无法找到问题本身的解决方案,我转而绕过了它.我制作了一个简短的函数,用于将文件的名称和ID解析为一个对象,并在其名称中放置文件的完整路径(在Google Drive中,文件名的限制约为32或33KB).这样,我可以用一个请求来创建正确的文件树,从而让子元素们更好、更有效地工作.

Node.js相关问答推荐

意外标识符断言Shopify Remix应用程序

node 模块错误:类型参数OT具有循环约束''

仅当所需文档是最后一个文档时才更新MongoDB,否则插入

如何使用多个OR参数从多个集合聚合

Sveltekit停靠的应用程序找不到从Build导入的包

无法从MongoDB文档中保存的对象数组中获取对象的属性

Mongodb - 在数组数组中查找()

使用单个 MongoDB 查询更新多个元素

表达 js 错误处理程序在第一个之后被忽略

Indexeddb 获取所有不同于特定值的记录

错误 node :错误:绑定消息提供 16 个参数,但准备语句需要 15 个

处理 UTC 日期和future

React Native:执行 com.android.build.gradle.internal.tasks.Workers$ActionFacade 时发生故障

node Axios 创建全局令牌变量以在单独的变量头中使用

如何使用 node 在 koa.js 中发送响应

Nodejs mongoose 在一个查询中从多个集合中获取结果

Zod 模式中的self 数组

如何使用 Node.js、Express 和 Mongoose 进行身份验证?

Node.js - 使用异步库 - 带有对象的 async.foreach

nodemon + express,监听端口=?