объекты не инициализируются в другом файле .js? - PullRequest
0 голосов
/ 19 ноября 2018

[решено - см. В конце, пожалуйста]

[отредактировано]

У меня есть следующий источник:

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;

Я сталкиваюсь со следующей проблемой:

  1. Если я запускаю/ Отладить его локально с помощью F5, он выполняется нормально и выдает ожидаемое значение.

  2. Если я попытаюсь развернуть его с помощью функций 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. и оно использовалось в одной временной функции сценария тестирования.

И просто плохие совпадения:

  1. очевидно, я был слишком уставшим изабыл об этом.

  2. были прокомментированы мои другие локальные тесты, и поэтому локальный запуск был успешным - в этом временном сценарии использовалось только это значение.

  3. Я решил развернуть именно в этот момент.И ни одно из значений, которые я использовал в своих функциях onCall () или onRequest (), не использовал globals.ITEM_TEST (в реальном и в фиктивном обоих)

Так что это ... Извините за беспокойство,На самом деле проблем нет.

...