amazon-web-services - 无法从 AWS Lambda 上托管的 Alexa Skill 中将数据推送到 Firebase

标签 amazon-web-services firebase firebase-realtime-database aws-lambda alexa-skills-kit

我在 Firebase 中有一个数据库,我正在尝试从 Alexa Skill 中向其中写入一些数据。该技能的 Node.js 代码位于 AWS Lambda 函数内,当该代码运行时,我想将一些数据推送到 Firebase。

我已经测试了在 Lambda 之外连接和推送到 Firebase 的代码,它的工作效果与预期完全一致。下面是该代码:

var firebase = require('firebase');

firebase.initializeApp({
    databaseURL: 'https://myapp.firebaseio.com',
    serviceAccount: './myapp.json',
});

var cart = firebase.database().ref('/cart'); 
console.log(cart);
    cart.push( {
    item: 'apples', quantity: '1', amount: '0'
},  function(error) {
    if (error) {
         console.log("Data could not be saved." + error);
    } else {
         console.log("Data saved successfully.");
    }
});

当从 Lambda 函数中执行时,相同的代码不会将任何内容推送到数据库实例。我在网上看到Lambda超时限制可能是造成这种情况的一个原因,所以我将超时限制增加到一分钟,但它仍然没有按预期运行。我还尝试使用 Firebase REST API 而不是 Node.js SDK,但这也不起作用。从 AWS Lambda 中将数据推送到 Firebase 的正确方法是什么?

最佳答案

我想我知道为什么会发生这种情况,我也遇到过类似的问题,这就是我所做的。

如果您想将一些日期写入数据库,您需要确保在完成之前不要调用 this.emit(*****) 。一旦您将响应返回给用户,线程就会关闭,并且您的信息不会被保存。

解决此问题的最简单方法是在确认信息已保存后向用户返回响应。

对于 Firebase 来说是这样的:

function writeUserData(userId) {

// Get a key for a new Post.
var userKey = db.ref('users/').push().key;

var reference = db.ref('users/' + userKey).set({
    user: userId
});

reference.then(() => {
        alexa.emit(':ask', "Works");
    },
    (err) => {
        alexa.emit(':ask', "Does not work");
    });

}

在我开始这样做之前,我无法保存任何东西。

希望有帮助。

关于amazon-web-services - 无法从 AWS Lambda 上托管的 Alexa Skill 中将数据推送到 Firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40166141/

相关文章:

amazon-web-services - 将 Amazon AMI 移动到另一个账户

android - 我正在使用 Firebase,在创建 firebase 对象时出现此异常

firebase - 如何从Firestore获取最近一小时更新的文档?

java - 在列表中添加来自 firebase 的对象的问题

ios - 从 Firebase Swift 检索信息的好方法

amazon-web-services - Cloudformation 自定义资源创建失败

node.js - Amazon CloudFront 能否接受 KMS 加密的 URL?

node.js - 使用 javascript SDK 在 lambda 上启用 SNS 事件源

PHP Firebase Clood Messaging (FCM) 错误缺少注册

java - 从 Firebase Android 读取值并更新它