[решено - см. В конце, пожалуйста]
[отредактировано]
У меня есть следующий источник:
index.js:
functions = require('firebase-functions');
admin = require('firebase-admin');
globals = require('./globals');
.....
admin.initializeApp();
exports.gateway = functions.https.onCall((data, context) => {
.....
return globals.dumpItemName(1);
});
exports.POST_gateway = functions.https.onRequest((req, res) => {
.....
return globals.dumpItemName(1);
});
globals.dumpItemName(1);
globals.js:
....
ITEM_NAMES = new Map()
.set(1, 'item1')
.set(2, 'item2');
....
getMapValue = function(map, key) {
let value = map.get(key);
if (value === undefined) {
throw new Error('Missing value for key ' + key);
}
return value;
}
....
dumpItemName = function(key) {
console.log(getMapValue(ITEM_NAMES, key));
}
exports.dumpItemName = dumpItemName;
Я сталкиваюсь со следующей проблемой:
Если я запускаю/ Отладить его локально с помощью F5, он выполняется нормально и выдает ожидаемое значение.
Если я попытаюсь развернуть его с помощью функций firebase deploy --only, а затем вызвать через почтальона https.onRequest (...) или функция https.onCall (....), которая пытается сделать то же самое:
globals.dumpItemName (1);
с ошибкой«Отсутствует значение для ключа 1»
Так что я предполагаю, что когда я запускаю его локально с помощью F5, он выполняет index.js как программу и загружает необходимые модули, а также запускает код в них - так что Map в globals.jsинициализируется.
Но когда я развертываю его через firebase deploy - только функции --functions, он не выполняет код.
Так что я должен сделать, чтобы инициализировать Map после развертывания?
[решено - ПРИЧИНА "ПРОБЛЕМЫ"]
Чрезвычайно глупо с моей стороны.
Очевидно длянекоторые из локальных тестов (у меня уже есть 10 функций сквозного сценария тестирования), я поместил в index.js следующий фрагмент кода:
//!!! JUST FOR TEST - REMOVE IT !!!
ITEM_NAMES = new Map()
.set(globals.ITEM_TEST, 'test');
//!!! JUST FOR TEST - REMOVE IT !!!
, поэтому эту карту переименовали с помощьюодно значение в этом.и значение globals.ITEM_TEST равно 200. и оно использовалось в одной временной функции сценария тестирования.
И просто плохие совпадения:
очевидно, я был слишком уставшим изабыл об этом.
были прокомментированы мои другие локальные тесты, и поэтому локальный запуск был успешным - в этом временном сценарии использовалось только это значение.
Я решил развернуть именно в этот момент.И ни одно из значений, которые я использовал в своих функциях onCall () или onRequest (), не использовал globals.ITEM_TEST (в реальном и в фиктивном обоих)
Так что это ... Извините за беспокойство,На самом деле проблем нет.