我刚刚开始使用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客户端)可以调用它。如果您不需要后者,则只需删除最后一行。

07-24 14:49