#reactjs #google-sheets
#reactjs #google-sheets
Вопрос:
В настоящее время я работаю с React JS и электронными таблицами Google и слежу за чем-то похожим на эту статью . Однако я столкнулся с проблемой. Всякий раз, когда я пытаюсь подключиться к своей электронной таблице, мое приложение React успешно запускается в течение нескольких секунд, а затем вылетает с этим сообщением об ошибке:
В настоящее время это мой код:
import {
GoogleSpreadsheet
} from 'google-spreadsheet';
function App() {
const setup = async () => {
const doc = new GoogleSpreadsheet('my spreadsheet-id'); // Obviously putting in my real spreadsheet id and data instead of this in my real code
await doc.useServiceAccountAuth({
client_email: 'my client-email',
private_key: 'my private-key'
});
await doc.loadInfo(); // loads document properties and worksheets
const sheet = doc.sheetsByIndex[0]; // or use doc.sheetsById[id]
console.log(sheet.title);
console.log(sheet.rowCount);
}
В моей функции приложения есть метод рендеринга, и я в конечном итоге запускаю функцию настройки для подключения к моей электронной таблице.
Кто-нибудь знает, почему это происходит и как я могу это исправить? Спасибо!
Комментарии:
1. Что произойдет, если вы войдете
doc
в систему после его определения?2. Я исправил это (проблема была с моим закрытым ключом), но спасибо за помощь!
3. Привет @HelloWorld, у меня такая же проблема. Вы помните, что вы сделали, чтобы заставить его работать?
4. @JotaRenan я смог заставить это работать, сохранив переменные в файле .env, а затем получив к ним доступ оттуда. У меня также был мой закрытый ключ, равный всему, что мне дала консоль разработчиков Google, включая ту часть, где написано «Начать закрытый ключ». Надеюсь, это поможет.
5. Я ценю ваш ответ! По-видимому, у меня был завершающий символ ‘ n’ в моем закрытом ключе. Это вызывало несоответствие регулярных выражений. Тем не менее, он еще не работает из-за другого исключения, сейчас, ха-ха.
Ответ №1:
Я понял это через некоторое время… Для тех, кто нашел этот поток StackOverflow своей единственной надеждой, я оставлю этот ответ здесь, чтобы сэкономить часть ваших часов.
По-видимому, если вы храните закрытый токен внутри вашего .env, n
символ будет проанализирован как \n
. Вам нужно будет убедиться, что косые черты НЕ экранированы.
Для моего проекта это решение:
await doc.useServiceAccountAuth({
client_email: 'my client-email',
private_key: process.env.REACT_APP_SHEET_PRIVATE_KEY.replace(/\n/g, 'n')
});
Ответ №2:
Убедитесь, что вы включили свою библиотеку api, поскольку она выдает ту же ошибку, когда используемый вами api отключен.
Комментарии:
1. Это больше похоже на комментарий, чем на ответ. Как таковой, он может быть удален. Рассмотрите возможность редактирования, если у вас есть больше информации для обмена.
Ответ №3:
Также проверьте наличие последней версии этой библиотеки, поскольку в старых версиях используется API Google v3, который устарел. Последние версии используют v4 и позволяют избежать проблем с аутентификацией. https://theoephraim.github.io/node-google-spreadsheet /#/
Ответ №4:
Для меня проблема была также с ключом API. У меня создалось впечатление, что я должен был удалить часть, в которой говорилось «Начать закрытый ключ …». Люди, у которых есть эта проблема, должны проверить свои ключи API.
Комментарии:
1. так нужно ли нам удалять эту часть?
2. Нет, вы оставляете эту часть и просто копируете и вставляете то, что они вам дают.
Ответ №5:
Я закодировал закрытый ключ в base64, а затем вставил его в .env
Затем вставьте мой код:
const private_key = Buffer.from(GOOGLE_SA_PRIVATE_KEY, 'base64').toString('utf8')
const doc = new GoogleSpreadsheet(SPREADSHEET_ID)
doc.useServiceAccountAuth({
// env var values are copied from service account credentials generated by google
// see "Authentication" section in docs for more info
client_email: GOOGLE_SA_EMAIL,
private_key: private_key.replace(/\n/g, 'n'),
})