对象是否未在另一个.js文件中初始化?

时间:2018-11-18 21:08:30

标签: javascript firebase google-cloud-functions

[已解决-请在最后查看]

[编辑]

我有以下来源:

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并加载所需的模块并在其中运行代码-这样就初始化了globals.js中的Map。

但是当我通过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(无论是实际值还是虚拟值)

就是这样... 很抱歉打扰。其实没有问题。

0 个答案:

没有答案