尝试查找文件 ID 时创建未定义的文件夹 returns

Create folder returns undefined when trying to find file id

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

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();

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

修改点:

  • 如果您想要使用 googleapis 为 Node.js 从创建的新文件夹中检索文件夹 ID,对于您的脚本,您可以使用 file.data.id 检索它。 , Ref2
  • 但是,在您的脚本中,当 resolve('Folder ID:', file.id); 为 运行 时,const rootFolder = await makeRoot(oAuth2Client);rootFolderFolder 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]);
    

参考: