我想在我的alexa技能中创建一个google文档表,这是用Node.js编写的。我启用了谷歌API,我在亚马逊开发门户网站设置了所需的范围,我实际上可以登录到谷歌帐户(所以发布的代码的前几行似乎工作),我没有得到任何错误消息。但是永远不会创建工作表。
现在主要的问题是,是否有人可以在我的代码中看到问题。
但我还有一个额外的问题我会非常感兴趣:因为我使用帐户链接,我不能在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);
}
});
编辑:我手动尝试了下半部分,可以创建一个电子表格。所以问题似乎确实是用“this.event.session.user.accessToken”检索访问令牌。
答案 0 :(得分:2)
我发现使用单元测试来调试这样的问题要容易得多。这允许在本地重新运行代码。我使用NPM和Mocha,它可以更容易地调试自定义和智能家居技能。网上有很多关于如何使用NPM和Mocha来测试Nodejs代码的信息,所以我在此不再重复。例如,请参阅Big Nerd Ranch article。这使得最初设置项目变得有点复杂,但是每次遇到错误都会让你感到高兴。
在这个例子中,我将代码分成两半:
我会首先测试第二部分,传入一个有效的令牌(仅用于测试)和一个测试文档名称。当它工作时,至少你知道文档创建代码是有效的,任何问题都必须与令牌或你如何得到它。
一旦有效,我会为第一部分创建一个测试。 我希望我们将一个硬编码的JSON对象作为'event'传入,将event.session.user.accesToken设置为第一个测试中使用的工作测试令牌:
'use strict';
var token = '<valid token obtained from google account>';
let testEvent = {
'session': {
'user': {
'accessToken': token
}
}
}