首页 > 解决方案 > 尝试查找文件 ID 时创建文件夹返回未定义

问题描述

我正在使用 Google drive API 创建一个文件夹,我想在创建后返回这个文件夹的 id,这样我就可以制作一个文件夹树。我不明白为什么我无法做到这一点,即使使用承诺我始终得到未定义文件夹 id 的结果。此代码为文件夹的 id 返回 undefined。我不想在创建文件夹后使用列表方法搜索驱动器,因为它很慢。有任何想法吗?

const fs = require('fs');
const readline = require('readline');
const {google, run_v1} = require('googleapis');

const SCOPES = ['https://www.googleapis.com/auth/drive'];
const TOKEN_PATH = 'token.json';


const CLIENT_NAME = 'Bowie, David';

const ROOT_FOLDER_LOCATION = '11ljl1lk1lk';


function getCreds(){
  return new Promise((resolve, reject) => {
    fs.readFile('credentials.json', (err, content) => {
      if (err) {
        reject('error loading client secret');
      } else{
        resolve(JSON.parse(content));
      }
    })
  })
}

function authorize(creds){
  const {client_secret, client_id, redirect_uris} = creds.installed;
  const oAuth2Client = new google.auth.OAuth2(
      client_id, client_secret, redirect_uris[0]);
  return new Promise((resolve, reject) => {
    
    fs.readFile(TOKEN_PATH, (err, token) => {
      if (err) {
        reject('this failed authorization');
      } else {
        oAuth2Client.setCredentials(JSON.parse(token));
        resolve(oAuth2Client);
      }
    })
  })
}


function makeRoot(auth) {
  const drive = google.drive({version: 'v3', auth});
  var fileMetadata = {
    'name': CLIENT_NAME,
    'mimeType': 'application/vnd.google-apps.folder',
    'parents': [ROOT_FOLDER_LOCATION]
  };
  return new Promise((resolve, reject) => {
    drive.files.create({
      resource: fileMetadata,
      fields: 'id'
    }, function(err, file) {
      if (err) {
        reject(err);
      } else {
        resolve('Folder ID:', file.id);
      }
    })
  })

}


async function doWork() {
  
  try {
    const response = await getCreds();
    const oAuth2Client = await authorize(response);
    const rootFolder = await makeRoot(oAuth2Client);
    console.log(rootFolder);
  } catch (err) {
    console.log(err)
  }
  
}

doWork();

我得到的唯一输出是“未定义”......

标签: node.jspromisegoogle-drive-api

解决方案


修改点:

  • 当您想使用 googleapis for Node.js 从创建的新文件夹中检索文件夹 ID 时,对于您的脚本,您可以使用file.data.id. 参考1 ,参考2
  • 但是,在您的脚本中,resolve('Folder ID:', file.id);运行rootFolder时间const rootFolder = await makeRoot(oAuth2Client);Folder ID:.

当您要检索 的值时Folder ID:###folderId###,请进行如下修改。

从:

resolve('Folder ID:', file.id);

至:

resolve("Folder ID:" + file.data.id);
  • 如果要分隔 和 的值Folder ID:###folderId###还可以使用下面的修改。在这种情况下,您可以检索文件夹 ID,例如const [text, rootFolder] = await makeRoot(oAuth2Client);.

      resolve(["Folder ID:", file.data.id]);
    

参考:


推荐阅读