【问题标题】:Google Sheets API with NodeJS, Json error带有 NodeJS、Json 错误的 Google Sheets API
【发布时间】:2019-03-10 11:23:49
【问题描述】:

过去几天我一直在使用 NodeJS 中的 google sheet API,但遇到了一些麻烦。我从他们的文档中获取了其中一个示例并对其进行了编辑以满足我的需要,但是在某一时刻它开始返回错误。控制台日志:

API 返回错误:SyntaxError: Unexpected token  in JSON at position 0

这是我的代码:

function getApplies(auth) {


  const sheets = google.sheets({version: 'v4', auth});
  sheets.spreadsheets.values.get({
      spreadsheetId: '1g5kYIIQy5f-UTSmOatTBPOto13ccfPvsJKQpxT6lhjE',
      range: 'A2:I',
  }, (err2, res) => {
    if (err2) return console.log('The API returned an error: ' + err2);
    const rows = res.data.values;

    if (rows.length) {
      //saving data here...
    }
  });
}

知道我在这里做错了什么吗?谢谢!

【问题讨论】:

  • 你试过检查res吗?它可能会提供有关哪个 API 调用失败的更多详细信息。看起来应该是 JSON 的一些参数没有完全正确解析。
  • 我做了,它看起来像一个常规的响应。 Console.log(res);显示带有数据的 res 对象,其中存储了 130 个数组。但是,const rows = res.data.values; 给出了错误 TypeError: Cannot read property 'data' of undefined @James
  • NathanReul 如果res 成功(有数据并且状态码为 2xx),那么问题将是返回的数据格式。您可以提供响应数据的样本吗?

标签: node.js google-sheets-api


【解决方案1】:

来自link

  1. 转到 Google 控制台
  2. 创建服务帐户密钥类型的新凭据
  3. 下载您的 json 文件
  4. npm install google-spreadsheet@2.0.3

    var GoogleSpreadsheet = require('google-spreadsheet');
    
    var creds = require('./client_secret.json');
    
    var doc = new GoogleSpreadsheet('*spreadsheet ID*');
    
    doc.useServiceAccountAuth(creds, function (err) {
        doc.getRows(1, function (err, rows) {
                if (err) {
                    console.log(err);
                } else {
                    console.log(rows.length);
                    console.log(rows);
                    for (var i=0; i < rows.length; i++) {
                        console.log(rows[i].TITLE-NAME-OF-YOUR-FIRST-COLUMN, rows[i].TITLE-NAME-OF-YOUR-SECOND-COLUMN);
                    }
                }
        });
    });
    
  5. 将电子表格 ID 替换为电子表格 URL 中的 ID。

  6. 与服务帐户电子邮件共享工作表。它在您的 json 文件中。

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    对于 v4 的 googleapi 使用:

    const { google } = require("googleapis");
    const key = require("service_account_credentials.json");
    
    const client = new google.auth.JWT(key.client_email, null, key.private_key, [
      "https://www.googleapis.com/auth/spreadsheets",
    ]);
    
    client.authorize(function (err, tokens) {
      const gsapi = google.sheets({ version: "v4", auth: client });
      const opt = {
        spreadsheetId: "spreadsheetId",
        range: "Sheet1!A:T",
      };
      gsapi.spreadsheets.values.get(opt).then(res => console.log(res));
    });
    

    【讨论】:

      【解决方案3】:

      首先你需要像这样解析你的 json 文件:

      const rows = JSON.parse(res.data.values);
      

      【讨论】:

      • 但是API返回错误,看上面那行。
      • 哦,是的……在此之前!让我再看看!
      • 我可以看看你的电子表格吗?我可以尝试用另一个 nodejs 模块来调试它。
      • 我希望!我不是此电子表格的所有者,我是为其他人构建的
      • 好的。在 google-spreadsheet npm 模块中,您缺少 json 凭据。那看看这个链接:npmjs.com/package/google-spreadsheet
      猜你喜欢
      • 2016-12-17
      • 1970-01-01
      • 2019-11-10
      • 1970-01-01
      • 2020-08-15
      • 2015-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多