从Firebase函数触发器访问Firebase托管文件

4

我有两个仓库,一个是用于Firebase函数的,另一个是用于静态Firebase托管的React网站。它们都使用相同的Firebase项目。

myfirebaseproject
--- firebase functions

--- firebase hosting
------index.html

我能从Firebase函数中读取Firebase托管文件吗?

let indexHTML = fs.readFileSync('pathToFirebaseHosting/index.html').toString();
2个回答

6
重要的一点是,Firebase Hosting和Cloud Functions是完全不同的产品,非常临时和短暂的Cloud Functions实例中没有可用的Hosting文件的简单本地路径。一切都没有捆绑在一起(这样根本无法扩展)。
由于Hosting文件都是公共的,所以Frank说的是对的 - 只需请求所需的内容即可。我建议使用request-promise模块,因为它提供了一个基于promise的接口,在Cloud Functions中更容易使用。
请注意,如果您想进行此类外发HTTP请求,则必须在项目上启用计费。否则,Cloud Functions将不允许该请求发生。还请注意,从Cloud Functions和Hosting的出入口都将有额外的计费。因此,如果您经常进行此请求,请预期会有一些相关费用。
如果您只想在Cloud Function中提供一些静态文件,而不必进行外部请求,请将这些文件复制到您的functions文件夹中,并与您的所有代码一起部署。您将能够在本地读取它们,无需启用计费即可尝试,并且不会产生出入流量费用。它还会更快。

我想为网络爬虫在我的index.html中注入open graph metatags。但我还不确定Firebase是否能够实现这一点。 - rendom
那么直接在函数中托管所有内容的缺点是什么?高成本还是性能差或两者兼而有之? - Devs love ZenUML

1
虽然Firebase Hosting API有REST API, 但它专注于部署更新,没有调用来访问已部署的文件。
但是,由于所有已部署的文件都是公开可访问的,因此您可以通过常规HTTP请求从公共互联网读取它们:
request('https://yourproject.firebaseapp.com/index.html', (err, res, body) => {
  if (err) { return console.log(err); }
  console.log(body);
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接