我刚刚开始使用Firebase / Javascript,并且很高兴能够很快地实现功能。我找到了很多在线示例,但都找不到能够解决以下情况的示例。上下文是一个移动应用程序,它将使用以下结构通过单个类似于Web挂钩的API记录事件:
exports.processEvent = functions.firestore.document('Events/{eventId}').onCreate(event => {
console.log('>>>>> Event triage triggered');
// grab the eventType and the payload to determine delegation path
const eventType = event.get("eventType");
const eventPayload = event.get("payload");
// delegate to the correct event handler
switch (eventType) {
case "ORDER":
console.log("=> Event:ORDER received: ", eventPayload);
handleOrderEvent(eventPayload);
break;
case "SHIP":
console.log("=> Event:SHIP received: ", eventPayload);
handleShipEvent(eventPayload);
break;
default:
console.error("=> Event:UNKNOWN received: ", eventPayload);
}
return true;
});
我将处理程序函数定义为:
exports.handleOrderEvent = function handleOrderEvent(payload) {
const orderDB = firestore.collection("Orders");
// Add the new order to the database
orderDB.add(payload)
.then(function(docRef) {
console.log("Created new Order: ", docRef.id);
return;
})
.catch(function(error) {
console.error("Error adding Order:", error);
return;
});
};
但是,在运行时,出现以下错误:
ReferenceError: handleOrderEvent is not defined
我只是不想在processEvent()函数中包含一个硕大的switch()语句,因此试图将其分解为更易于管理的块。
我在处理程序函数的声明中缺少什么,使processEvent()函数无法找到它?我尝试将其放置在index.js文件中的processEvent()函数上方。我刚刚声明了该函数,但未将其附加到导出。我确定这是基本的东西吗?
最佳答案
我认为您的导出内容不会自动提供给本地文件。因此,这可能会更好:
function handleOrderEvent(payload) {
const orderDB = firestore.collection("Orders");
// Add the new order to the database
orderDB.add(payload)
.then(function(docRef) {
console.log("Created new Order: ", docRef.id);
return;
})
.catch(function(error) {
console.error("Error adding Order:", error);
return;
});
};
exports.handleOrderEvent = handleOrderEvent;
因此,这首先定义了
handleOrderEvent
函数,您可以从processEvent
导出调用该函数。然后,它还会导出handleOrderEvent
,以便其他脚本(或Cloud Functions客户端)可以调用它。如果您不需要后者,则只需删除最后一行。