Я хочу получить общую электронную таблицу Google в веб-проекте firebase. Я использовал для этого функции firebase. Сначала я получаю токен с помощью google.auth.JWT, а затем пытаюсь прочитать электронную таблицу. Частично я следую Как использовать API листов Google, находясь внутри облачной функции Google. Код функции следующий
exports.getNotes =functions.https.onRequest( (req, res) => {
var jwt = getJwt();
var apiKey = getApiKey();
var spreadsheetId = '<spreadsheet Id/>';
var range = 'Notes!A1:E1';
appendSheetRow(jwt, apiKey, spreadsheetId, range)
.then((result) => {
//console.log(result);
res.status(200).send(result);
})
.catch((err) => {
//console.log('error');
res.status(500).send({ err });
});
});
function getJwt() {
var credentials = require("./credentials.json");
var client = new google.auth.JWT(
credentials.client_email, null, credentials.private_key,
['https://www.googleapis.com/auth/spreadsheets','https://www.googleapis.com/auth/spreadsheets.readonly']
);
return new Promise((resolve, reject) => {
client.authorize((err, tokens) => {
if (err) {
reject(err);
} else {
console.log(tokens);
// google.options({
// auth: client
// });
resolve(tokens);
}
});
});
}
function getApiKey() {
var apiKeyFile = require("./api_key.json");
return apiKeyFile.key;
}
function appendSheetRow(jwt, apiKey, spreadsheetId, range, row) {
const sheets = google.sheets({version: 'v4'});
return new Promise((resolve, reject)=>{
console.log(spreadsheetId, range, jwt, apiKey);
sheets.spreadsheets.values.get({
spreadsheetId: spreadsheetId,
range: range,
auth: jwt,
key: apiKey,
},function(err, result){
if(err){
console.log(err);
return err;
}else{
console.log(result);
resolve(result.data.values);
//return result;
}
});
});
}
Результат кода журнала firebase
2018-12-28T05:47:43.993155161Z D getNotes: Function execution started
2018-12-28T05:47:44.001Z I getNotes: hello
2018-12-28T05:47:44.087Z I getNotes: <spread sheetID/> Notes!A1:E1 Promise {
<pending> } <Key/>
2018-12-28T05:47:44.093Z I getNotes: TypeError: authClient.request is not a function
at /user_code/node_modules/googleapis/node_modules/googleapis-common/build/src/apirequest.js:225:31
at next (native)
at /user_code/node_modules/googleapis/node_modules/googleapis-common/build/src/apirequest.js:19:71
at __awaiter (/user_code/node_modules/googleapis/node_modules/googleapis-common/build/src/apirequest.js:15:12)
at createAPIRequestAsync (/user_code/node_modules/googleapis/node_modules/googleapis-common/build/src/apirequest.js:57:12)
at Object.createAPIRequest (/user_code/node_modules/googleapis/node_modules/googleapis-common/build/src/apirequest.js:49:9)
at Resource$Spreadsheets$Values.get (/user_code/node_modules/googleapis/build/src/apis/sheets/v4.js:566:37)
at Promise (/user_code/index.js:265:32)
at appendSheetRow (/user_code/index.js:263:10)
at exports.getNotes.functions.https.onRequest (/user_code/index.js:222:3)
2018-12-28T05:47:44.124Z I getNotes: { access_token: '<my token/>',
token_type: 'Bearer',
expiry_date: 1545979664000,
id_token: undefined,
refresh_token: 'jwt-placeholder' }