Я только начал играть с 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. Я только что объявил функцию, не привязывая ее к экспорту. Я уверен, что это что-то основное?
Я не думаю, что ваши экспорты автоматически доступны для локального файла. Так что это может работать лучше:
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). Если вам не нужно последнее, вы можете просто удалить эту последнюю строку.