使用节点 js 创建 google 个电子表格

Create google spreadsheet with node js

我想在我的 alexa 技能中创建一个 google 文档 sheet,它是用 Node.js 编写的。我启用了 google API,我在亚马逊开发门户中设置了所需的范围,我实际上可以登录到 google 帐户(所以发布的代码的前几行似乎工作),我没有收到任何错误消息。但是 sheet 永远不会被创建。

现在的主要问题是是否有人可以看到我的代码中的问题。

但我还有一个我非常感兴趣的附加问题:由于我使用帐户链接,我无法在 Alexa 测试模拟器中尝试该代码,但必须先将其上传到 Alexa 运行 它,在那里我无法获得任何调试消息。如何以这种方式进行最佳调试?

if (this.event!== undefined)
{
 if (this.event.session.user.accessToken === undefined) 
 {
    this.emit(':tellWithLinkAccountCard','to start using this skill, please use the companion app to authenticate on Google');
    return;
  }
}
else
{

    this.emit(':tellWithLinkAccountCard','to start using this skill, please use the companion app to authenticate on Google');
    return;
}
var oauth2Client = new google.auth.OAuth2('***.apps.googleusercontent.com', '***', '***');

oauth2Client.setCredentials({
     access_token: this.event.session.user.accessToken,
     refresh_token: this.event.session.user.refreshToken
});

var services = google.sheets('v4');
services.spreadsheets.create({
  resource : {properties:{title:"MySheet"}},
  auth       : oauth2Client
}, function(err,response) {
  if( err ) {
    console.log('Error : unable to create file, ' + err);
    return;
  } else {
    console.dir(response);
  }
});

编辑:我只手动尝试了下半部分,并且可以创建一个跨页sheet。所以问题似乎确实是用 "this.event.session.user.accessToken" 检索访问令牌。

我发现使用单元测试调试此类问题要容易得多。这允许在本地重新运行代码。我使用 NPM 和 Mocha,它可以更轻松地调试自定义和智能家居技能。网上关于如何使用NPM和Mocha测试Nodejs代码的资料很多,这里不再赘述。例如,参考 Big Nerd Ranch article。这会使最初设置项目变得有点复杂,但每次遇到错误时您都会很高兴。

在这个例子中,我将代码分成两半:

  1. 前半部分将处理来自 Alexa 的请求并提取令牌。
  2. 后半部分将使用令牌创建 Google 文档。我还会传递要创建的文档的名称。

我会先测试第二部分,传入一个有效的令牌(仅用于测试)和一个测试文档名称。当它起作用时,至少您会知道文档创建代码正在起作用,任何问题都必须与令牌有关或您如何获得它。

一旦成功,我就会为第一部分创建一个测试。 我将使用硬编码的 JSON 对象作为 'event' 传递,其中 event.session.user.accesToken 设置为第一个测试中使用的工作测试令牌:

'use strict';

var token = '<valid token obtained from google account>';

let testEvent = {
  'session': {
    'user': {
      'accessToken':  token
    }
  }
}