Javascript googleapis失败(在JWT Auth之后),类型错误:authClient.request不是函数

Javascript googleapis失败(在JWT Auth之后),类型错误:authClient.request不是函数,javascript,node.js,google-sheets,google-api,Javascript,Node.js,Google Sheets,Google Api,我正在尝试访问google Sheets电子表格,该表格与API密钥属于同一帐户。我使用JWT是因为在交互过程中没有用户在场 下面是我认为获得工作表内容的最小实现 它总是以TypeError失败:authClient.request不是函数 在我看来,身份验证令牌已成功创建 const fs = require('fs'); const { google } = require('googleapis'); fs.readFile('./<credentials>.json','u

我正在尝试访问google Sheets电子表格,该表格与API密钥属于同一帐户。我使用JWT是因为在交互过程中没有用户在场

下面是我认为获得工作表内容的最小实现

它总是以TypeError失败:authClient.request不是函数

在我看来,身份验证令牌已成功创建

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

fs.readFile('./<credentials>.json','utf-8',(e,content) => {
    if ( e ) return console.log('error',e);
    authorize(JSON.parse(content))
});

function authorize(credentials) {
    let jwtClient = new google.auth.JWT(
        credentials.client_email,
        null,
        credentials.private_key,
        ['https://www.googleapis.com/auth/spreadsheets.readonly']
    )
    jwtClient.authorize((e,auth) => {
        if ( e ) return console.log('authorize error',e);

        const sheets = google.sheets({version: 'v4', auth });

        sheets.spreadsheets.values.get({
            spreadsheetId: '<sheet_id>',
            range: 'Class Data!A1:E20',
          },(err,res) => {
              if ( err ) return console.log('SHEETS err',err);
              console.log('SHEETS res',res);
          });
    });    
};
完整报告的错误始终是

SHEETS err TypeError: authClient.request is not a function
    at /Users/web7/google-sheets/node_modules/googleapis-common/build/src/apirequest.js:238:31
    at Generator.next (<anonymous>)
    at /Users/web7/google-sheets/node_modules/googleapis-common/build/src/apirequest.js:19:71
    at new Promise (<anonymous>)
    at __awaiter (/Users/web7/google-sheets/node_modules/googleapis-common/build/src/apirequest.js:15:12)
    at createAPIRequestAsync (/Users/web7/google-sheets/node_modules/googleapis-common/build/src/apirequest.js:56:12)
    at Object.createAPIRequest (/Users/web7/google-sheets/node_modules/googleapis-common/build/src/apirequest.js:48:9)
    at Resource$Spreadsheets$Values.get (/Users/web7/google-sheets/node_modules/googleapis/build/src/apis/sheets/v4.js:573:37)
    at jwtClient.authorize (/Users/web7/google-sheets/Server.js:25:36)
    at authorizeAsync.then.r (/Users/web7/google-sheets/node_modules/google-auth-library/build/src/auth/jwtclient.js:117:45)
身份验证令牌的格式为:-

{
 access_token: "<long_key>",
 token_type: "Bearer",
 expiry_date: 1587993215000,
 id_token: undefined,
 refresh_token: "jwt-placeholder"
}

这次修改怎么样

修改点: 请使用jwtClient像const sheets=google.sheets{version:v4,auth:jwtClient}一样进行身份验证。我想你的问题可能是这个原因。 修改脚本: 当您的脚本被修改时,它将变成如下所示

发件人: 致: 注: 在这次修改中,它假设您已经使用您的服务帐户获取并输入了Google电子表格的值。
如果我用auth:jwtClient替换auth,我会收到一个错误错误:调用方没有权限我不确定使用我的服务帐户的“get and put values”是什么意思。该工作表是使用我的标准帐户直接在谷歌工作表中创建的。@user3094755感谢您的回复。给您带来不便,我深表歉意。我可以问你谷歌电子表格是否已经与服务帐户的电子邮件共享了吗?因为为了使用服务帐户访问Google电子表格,电子表格需要与服务帐户的电子邮件共享。你能再确认一下吗?对auth:jwtClient的更改修复了最初的问题,因此这只是权限问题,你的建议让我尝试在生成密钥时使用Google API创建的电子邮件地址共享该表。电子邮件发送失败,但权限已添加到工作表中,因此它现在可以工作了-谢谢。@user3094755谢谢您的回复。我很高兴你的问题解决了。关于电子邮件发送失败,似乎这是服务帐户的规范。我为此道歉。如果您的问题已解决,请按“接受”按钮。与您有相同问题的其他人也可以将您的问题作为可以解决的问题。我认为你的问题和解决方案对他们会有帮助。如果你找不到按钮,尽管告诉我。
jwtClient.authorize((e,auth) => {
    if ( e ) return console.log('authorize error',e);

    const sheets = google.sheets({version: 'v4', auth });

    sheets.spreadsheets.values.get({
        spreadsheetId: '<sheet_id>',
        range: 'Class Data!A1:E20',
      },(err,res) => {
          if ( err ) return console.log('SHEETS err',err);
          console.log('SHEETS res',res);
      });
});
jwtClient.authorize((err) => {
  if (err) console.log(err);
});
const sheets = google.sheets({ version: "v4", auth: jwtClient });
sheets.spreadsheets.values.get(
  {
    spreadsheetId: '<sheet_id>',
    range: 'Class Data!A1:E20',
  },
  (err, res) => {
    if (err) return console.log("SHEETS err", err);
    console.log("SHEETS res", res.data);
  }
);