Serverless + Firebase:API 不是回复消息
Serverless + Firebase: API is not reply message
我正在创建一个 api,它将使用 Nodejs、无服务器、Javascript.
更新 Firebase 实时数据库
我的 .js 文件:
var admin = require("firebase-admin");
var serviceAccount = require("../xxxxxxx-firebase-adminsdk-xxxxxxx.json");
module.exports.saveState = (event, context, callback) => {
const body = JSON.parse(event.body);
var timestamp_create = body.timestamp_create;
try {
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://xxxxxxx.firebaseio.com"
});
} catch (err) {
console.log('Firebase initialization error', err.stack);
}
var db = admin.database();
var ref = db.ref('item/');
ref.child(timestamp_create).set({
state: 'empty'
}, function (error) {
if (error) {
console.log("Data could not be saved." + error);
} else {
console.log("Data saved successfully.");
return callback(null, {
headers: {
"Access-Control-Allow-Origin": "*",
},
statusCode: 200,
body: JSON.stringify({ msg: "Data saved successfully." })
});
}
});
};
我将 API 部署到 AWS 并在 Postman 上进行测试:
问题和我的尝试:
- 将项目保存到 Firebase 实时数据库后,api 没有回复消息。 Api超时了。
- 我检查了 CloudWatch,打印了日志
("Data saved successfully.")
,但它根本没有执行 return callback
。
- 我在 "serverless offline" 中尝试了 api,它正常工作,并且 return 发送了消息。
API 不会在 AWS 环境 (lambda) 中 return 回调。
如有任何建议,我们将不胜感激。
经过漫长的google和测试,我得出了解决方案,留在这里供参考:
保存数据后firebase数据库连接没有释放,导致AWS Lambda无法return回调。简单的解决方案是在任务
后关闭数据库连接
var ref = db.ref('item/');
ref.child(timestamp_create).set({
state: 'empty'
}, function (error) {
if (error) {
console.log("Data could not be saved." + error);
} else {
console.log("Data saved successfully.");
db.gpOffline(); // this line will release database connection
return callback(null, {
headers: {
"Access-Control-Allow-Origin": "*",
},
statusCode: 200,
body: JSON.stringify({ msg: "Data saved successfully." })
});
}
});
我正在创建一个 api,它将使用 Nodejs、无服务器、Javascript.
更新 Firebase 实时数据库我的 .js 文件:
var admin = require("firebase-admin");
var serviceAccount = require("../xxxxxxx-firebase-adminsdk-xxxxxxx.json");
module.exports.saveState = (event, context, callback) => {
const body = JSON.parse(event.body);
var timestamp_create = body.timestamp_create;
try {
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://xxxxxxx.firebaseio.com"
});
} catch (err) {
console.log('Firebase initialization error', err.stack);
}
var db = admin.database();
var ref = db.ref('item/');
ref.child(timestamp_create).set({
state: 'empty'
}, function (error) {
if (error) {
console.log("Data could not be saved." + error);
} else {
console.log("Data saved successfully.");
return callback(null, {
headers: {
"Access-Control-Allow-Origin": "*",
},
statusCode: 200,
body: JSON.stringify({ msg: "Data saved successfully." })
});
}
});
};
我将 API 部署到 AWS 并在 Postman 上进行测试:
问题和我的尝试:
- 将项目保存到 Firebase 实时数据库后,api 没有回复消息。 Api超时了。
- 我检查了 CloudWatch,打印了日志
("Data saved successfully.")
,但它根本没有执行return callback
。 - 我在 "serverless offline" 中尝试了 api,它正常工作,并且 return 发送了消息。
API 不会在 AWS 环境 (lambda) 中 return 回调。
如有任何建议,我们将不胜感激。
经过漫长的google和测试,我得出了解决方案,留在这里供参考:
保存数据后firebase数据库连接没有释放,导致AWS Lambda无法return回调。简单的解决方案是在任务
后关闭数据库连接var ref = db.ref('item/');
ref.child(timestamp_create).set({
state: 'empty'
}, function (error) {
if (error) {
console.log("Data could not be saved." + error);
} else {
console.log("Data saved successfully.");
db.gpOffline(); // this line will release database connection
return callback(null, {
headers: {
"Access-Control-Allow-Origin": "*",
},
statusCode: 200,
body: JSON.stringify({ msg: "Data saved successfully." })
});
}
});