[已解决-请在最后查看]
[编辑]
我有以下来源:
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并加载所需的模块并在其中运行代码-这样就初始化了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。 并用于一个临时测试方案功能。
巧合的是:
显然我太累了,忘记了它。
我的其他本地测试得到评论,这就是本地运行成功的原因-在这种临时情况下,仅使用此值。
我已经决定在这个确切的时刻进行部署。而且我在onCall()或onRequest()函数中使用的所有值均未使用globals.ITEM_TEST(无论是实际值还是虚拟值)
就是这样... 很抱歉打扰。其实没有问题。