我有两个 firebase 项目,一个用于开发 (project-dev),一个用于生产 (project-prod)。
我初始化了 firebase CLI,用于编写和部署链接到 project-prod 的云函数。然后我运行 firebase use --add
并添加了 project-dev 以便我可以将相同的功能部署到两个项目;我不想两次重写同一个函数。
此时,我遇到了问题。在函数中,我必须向实时数据库写入一些内容,但是当我将该函数部署到 project-dev 时,它会写入到 project-prod 的数据库中。
我想要实现的是该函数必须引用它所部署到的项目的数据库。这样我就有了一个函数,当它部署到 project-dev 时,它会写入 project-dev 的数据库,而当它部署到 project-prod 时,它会写入 project-prod 的数据库。
有可能实现吗?如果没有,那该怎么走?
编辑
函数代码:
exports.AddOrders= functions.https.onRequest(async (req, res) => {
async function addOrder(key, value) {
var ref = app.database().ref("/orders");
return ref.child(key).set(value);
}
var orders = req.body['orders'];
var promises = [];
for (var key in orders) {
promises.push(addOrder(key, orders[key]));
}
Promise.all(promises).then(
_ => {
res.sendStatus(200);
return null;
}
).catch(err => {
res.send(err);
})
});
(这个功能没问题,问题是写错了数据库)
答案 0 :(得分:1)
使用 firebase use --add <projektName>
添加项目后,您需要使用 firebase use <projectName>
选择它。然后您可以使用 firebase deploy
或 firebase deploy --only functions
部署到选定的项目。
答案 1 :(得分:0)
这是任何想知道问题所在的人的答案。
他正在使用与生产项目相关联的服务帐户的凭据初始化 admin sdk。解决方案是将其更改为 admin.initializeApp()
而不传递任何参数。这使得 Firebase 使用每个项目的默认凭据。
我知道这是一个常见的错误,但同样,这里是相应文档的链接 https://firebase.google.com/docs/admin/setup