google-drive-api - gapi.client 的问题
问题描述
我是使用 JavaScript 开发 Web 应用程序以可视化来自 Google 表格的数据的团队的一员。
我们完全按照快速入门指南中所示的初始化方向,通过有关用户注销的代码: https ://developers.google.com/drive/api/v3/quickstart/js
我们有一个唯一的 API 密钥和一个客户端 ID,并使用了以下发现文档和范围:
var DISCOVERY_DOCS = [
"https://sheets.googleapis.com/$discovery/rest?version=v4",
"https://www.googleapis.com/discovery/v1/apis/drive/v3/rest",
];
// Authorization scopes required by the API; multiple scopes can be
// included, separated by spaces.
var SCOPES =
"https://www.googleapis.com/auth/spreadsheets https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/drive.metadata.readonly";
我们现在正在尝试实现一个动态侧边栏,用于显示 Google Drive 文件夹中存在的文件。最终用户稍后将使用这些来过滤数据集。
这是该函数的代码:
function getFolders() {
gapi.client.drive.files
.list({
pageSize: 100,
fields: "nextPageToken, files(id, name, parents)",
})
.then(function (response) {
const childrenFolders = [];
var files = response.result.files;
if (files.length > 0) {
const dashboardId = "XXXXXXXXXXXXXXXXXXXXX";
//used to find the parent folder from the selectSchool
for (var i = 0; i < files.length; i++) {
var file = files[i];
if (file.parents == dashboardId) {
if (file.name != "File List" && file.name.substr(file.name.length - 4) != "xlsx") {
childrenFolders.push(file.name);
}
}
}
console.log(childrenFolders);
return childrenFolders;
} else {
errorMsg("No files found");
}
});
}
这是我们的 index.html 文件的脚本部分:
<script src="js/popups.js"></script>
<script src="js/reader.js"></script>
<script src="js/sidebar.js"></script>
<script src="js/charts.js"></script>
<script src="js/main.js"></script>
<script
src="https://apis.google.com/js/api.js"
onload="this.onload=function(){};handleClientLoad()"
onreadystatechange="if (this.readyState === 'complete') this.onload()"
></script>
getFolders() 在 reader.js 中定义,包含 google drive api 的身份验证功能(如在快速入门文档中),并在呈现侧边栏的 sidebar.js 中调用。
当用户首次加载网页时,我们的身份验证功能会强制他们登录以继续;这些功能运作良好。但是,在 JS 文件中调用 getFolders() 以生成文件名数组会产生错误,提示“未定义 gapi”。
如果我在浏览器控制台中运行 getFolders(),它将使用以下输出运行:
> getFolders()
< undefined
> (3) ['file_name_1', 'file_name_2', 'file_name_3'] reader.js:202
怎么会是函数在控制台中运行,而不是在js文件中呢?我认为问题在于打印的“未定义”。当我运行“gapi.client”时,输出为“未定义”,如果我运行
console.log(gapi.client.drive)
我得到“无法读取未定义的属性‘驱动器’”
如果我们提供了客户 ID 信息,为什么客户是未定义的?我对 Google Drive API 很陌生,所以我忘记做这件事可能很愚蠢。
谢谢您的帮助!
解决方案
推荐阅读
- apache-kafka - Spark Structured Streaming:读取kafka主题中的前N条消息作为批处理查询
- python - 包含前导空白的正则表达式列表
- macos - 星际争霸可以在 Mac OS 10.8 上运行吗?
- python - 计算段落python每个单词中的字母数
- matlab - 如何使用 MATLAB 将字符串变量保存到 .txt 文件?
- javascript - 我的反应网站在移动浏览器上显示为空白
- java - CELL_TYPE_NUMERIC 无法解析或不是字段
- c# - 从列表中选择特定坐标
- python-3.x - python 3.8 的 pyinstaller 是否有替代方案?
- javascript - 如何处理道具历史位置搜索参数?