【发布时间】:2017-08-19 19:21:13
【问题描述】:
我在这里创建了这个错误的复制品(丑陋地使用了 Aurelia,但为了证明这一点):https://jberggren.github.io/GoogleAureliaBugReproduce/
如果我加载 Google API 并尝试在 Google Drive 中列出我的文件,我从 Googles quickstart 派生的代码可以正常工作。如果我在加载 Aurelia 后使用相同的代码,我会收到来自 gapi 的脚本错误说明
Uncaught Error: arrayForEach was called with a non array value
at Object._.Sa (cb=gapi.loaded_0:382)
at Object._.eb (cb=gapi.loaded_0:402)
at MF (cb=gapi.loaded_0:723)
at Object.HF (cb=gapi.loaded_0:722)
at Object.list (cb=gapi.loaded_0:40)
at listFiles (index.js:86)
...
在调试时,它似乎是某种数组检查(Chroms 说“本机代码”)在 Aurelia 加载后失败。在我寻找答案的过程中,我发现另外两个人有同样的问题但没有解决方案(Aurelia gitter question,SO Question)。不知道是否向 Aurelia 团队、Google 或实际问题所在的位置报告此问题。
帮帮我吧,你是我唯一的希望。
【问题讨论】:
-
您可能想要更改演示 sn-p 的范围。不确定是否有太多 SO 贡献者愿意让您访问他们的云端硬盘帐户。尝试“drive.file”,它限制对您的应用创建的文件的访问。如果这阻碍了你,只需绕过 gapi 并制作你自己的 http rest/json 请求或使用aurelia.io/hub.html#/doc/article/aurelia/fetch-client/latest/…。您可以将 gapi 用于 OAuth 位,然后将访问令牌注入您的请求中,例如使用 httpClient.configure
-
您好,感谢您的评论。我曾考虑过范围,因此原来的 drive.metadata.readonly 但我现在将其更改为 drive.file。这是一个 repo,我的实际项目正在使用另一个库来进行更简单的文件处理,该库在下面使用 gapi。从客户端获取/保存文件内容时,我发现 Google api 很难使用。我只是想保存一些 json(好吧,也许还有一些图像)。
-
恕我直言,在开源之前使用 gapi 并不是一个好主意。我怀疑 gapi/aurelia/a polyfill 中的一个或另一个正在重载原型。 Google Drive REST API 并不难解决,如果您自己动手,您将更好地控制可恢复上传、部分下载、限制等。
-
我快速浏览了您的代码。尽管与您当前的问题无关,但迭代对 files.list 的响应直到返回的数组为空并不是提取所有文件的正确方法。您应该迭代直到 nextPageToken 为空/未定义。这是因为 Drive 可以随时返回从零到 maxPageSize 的任意长度的页面。
-
是的,正如我所说,谷歌 api 代码基于他们的快速入门,只是为了提供这个简单的重现,所以我不会实际使用。
标签: google-drive-api google-api-js-client aurelia