Добавление удобных функций в Firebase

1

Я только начал играть с Firebase/Javascript и, к счастью, смог быстро встать на ноги. Я нашел много примеров в Интернете, чтобы начать, но не смог найти тот, который соответствует следующему сценарию. Контекст представляет собой мобильное приложение, которое будет регистрировать события через единый веб-подобный 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

Я просто не хочу иметь гигантский оператор switch() внутри функции processEvent(), поэтому пытался разложить его на более управляемые куски.

Чего мне не хватает в объявлении функции-обработчика, которая не позволяет функции processEvent() найти ее? Я попытался разместить его над функцией processEvent() в файле index.js. Я только что объявил функцию, не привязывая ее к экспорту. Я уверен, что это что-то основное?

Теги:
firebase
google-cloud-functions
function
google-cloud-firestore

1 ответ

0

Я не думаю, что ваши экспорты автоматически доступны для локального файла. Так что это может работать лучше:

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). Если вам не нужно последнее, вы можете просто удалить эту последнюю строку.

  • 0
    Фрэнк - спасибо! Я реализовал, как предлагалось, без последней строки, и теперь он работает, как ожидалось. Мне пришлось развернуть его дважды - возможно, слишком нетерпеливо с моей стороны. Очень ценится!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню