每当触发针对我的Firebase DB的onWrite()时,尝试将Webhook发送给Slack。在其他一些帖子/指南中,我能够部署以下代码,但是在执行时遇到ReferenceError: Request is not defined
错误。我不知道如何解决未定义的请求。
const functions = require('firebase-functions');
const webhookURL = "https://hooks.slack.com/services/string/string";
exports.firstTest = functions.database.ref('first').onWrite( event => {
return request.post(
webhookURL,
{json: {text: "Hello"}}
);
});
答案 0 :(得分:1)
通过执行exports.firstTest = functions.database.ref('first').onWrite()
,您可以在实时数据库中创建,更新或删除数据时触发firstTest
云功能。它称为后台触发器,请参见https://firebase.google.com/docs/functions/database-events?authuser=0
使用此触发器,所有操作在后端发生,并且您无权访问Request(或Response)对象。 Cloud Function没有任何前端概念:例如,它可以由另一个写入数据库的后端进程触发。如果要在前端检测Cloud Function的结果(例如,创建新节点),则必须设置一个侦听器以侦听此新节点的位置。
如果您想通过HTTP请求调用功能(可能是从前端或其他“ API使用者”调用)并收到对HTTP请求的响应,则需要使用另一种类型的Cloud Function, HTTP Cloud Function ,请参见https://firebase.google.com/docs/functions/http-events。另请参见您可以直接调用的另一种Cloud Function:Callable Cloud Functions。
最后,请注意:
.onWrite( event => {})
,您使用的是旧语法,请参见https://firebase.google.com/docs/functions/beta-v1-diff?authuser=0 如果要从Cloud Function调用外部URL(例如,问题中提到的Slack Webhook),则需要使用request-promise
(https://github.com/request/request-promise)之类的库。 / p>
有关示例,请参见How to fetch a URL with Google Cloud functions? request?或Google Cloud functions call URL hosted on Google App Engine
重要:请注意,您需要加入“火焰”或“烈火”定价计划。
事实上,免费的“ Spark”计划“仅允许对Google拥有的服务进行出站网络请求”。请参见https://firebase.google.com/pricing/(将鼠标悬停在“云函数”标题之后的问号上)