Node.js при попытке доступа к таблицам Google - PullRequest
1 голос
/ 20 марта 2020

Я пытаюсь получить бот Discord для доступа к электронной таблице Google, но эта ошибка продолжает появляться, и я не могу ее обойти, я просматриваю это видео (https://www.youtube.com/watch?v=UGN6EUi4Yio) и все делал до момента запуска программы. Есть идеи как решить это? Заранее спасибо.

UnhandledPromiseRejectionWarning: TypeError: Cannot set property 'jwtClient' of undefined
  at useServiceAccountAuth (Z:\GitHub\discordBot\node_modules\google-spreadsheet\lib\GoogleSpreadsheet.js:60:20)
  at internal/util.js:297:30
  at new Promise (<anonymous>)
  at useServiceAccountAuth (internal/util.js:296:12)
  at accessSpreadsheet (Z:\GitHub\discordBot\sheets\sheets.js:8:45)
  at Object.module.exports.run (Z:\GitHub\discordBot\comandos\duvida.js:51:5)
  at Client.<anonymous> (Z:\GitHub\discordBot\index.js:63:21)     
  at Client.emit (events.js:311:20)
  at MessageCreateHandler.handle (Z:\GitHub\discordBot\node_modules\discord.js\src\client\websocket\packets\handlers\MessageCreate.js:9:34)
  at WebSocketPacketManager.handle (Z:\GitHub\discordBot\node_modules\discord.js\src\client\websocket\packets\WebSocketPacketManager.js:105:65)

Мои листы. js Файл:

const { GoogleSpreadsheet } = require('google-spreadsheet');
const { promisify } = require('util');

const creds = require('./client_secret.json');

async function accessSpreadsheet(){
  const doc = new GoogleSpreadsheet('1klBj2ZSk-IaDAT-w8kUKzmLw-o5oAk9otZL6xh1vnks');
  await promisify(doc.useServiceAccountAuth)(creds);
  const info = await promisify(doc.getInfo)();

  const sheet = info.worksheets[0];
  console.log(`Title: ${sheet.title}`);
}

module.exports.accessSpreadsheet = accessSpreadsheet;

1 Ответ

0 голосов
/ 22 марта 2020
  • Вы хотите получить заголовок 1-й вкладки в электронной таблице, используя модуль google-spreadsheet.
  • client_secret.json - это файл учетных данных учетной записи службы.
  • Вы уже могли использовать Sheets API.

Я мог понять, как выше. Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Если вы используете последнюю версию google-spreadsheet (на данном этапе это google-spreadsheet@3.0.10.), Как насчет следующей модификации?

Модифицированный скрипт:

const { GoogleSpreadsheet } = require("google-spreadsheet");

const creds = require('./client_secret.json');

async function accessSpreadsheet() {
  const doc = new GoogleSpreadsheet('1klBj2ZSk-IaDAT-w8kUKzmLw-o5oAk9otZL6xh1vnks');
  await doc.useServiceAccountAuth(creds);
  await doc.loadInfo();
  const sheet = doc.sheetsByIndex[0];
  console.log(`Title: ${sheet.title}`);
}

module.exports.accessSpreadsheet = accessSpreadsheet;

Примечание:

  • Если client_secret.json не для учетной записи службы, возникает ошибка No key or keyFile set. Пожалуйста, будьте осторожны.
  • При возникновении ошибки The caller does not have permission, пожалуйста, поделитесь электронной таблицей с адресом электронной почты учетной записи службы.

Ссылка:

...