使用Firebase函数和Firebase主机的动态渲染



我正在尝试使用Firebase函数为Firebase Hosting中托管的react应用程序实现动态渲染。

它背后的想法来自于这篇文章,https://dev.to/burhanahmeed/dynamic-rendering-simple-solution-for-spa-when-shared-on-social-media-amd

我想实现的是Firebase函数处理所有请求,根据用户代理提供动态生成的静态内容,否则为Firebase Hosting中托管的主应用程序提供服务。

到目前为止,我刚刚更改了firebase.json,将所有请求重定向到我的"app"函数,而不是"/index.html">

"rewrites": [
{
"source": "**",
"function": "app"
}
]

我的应用程序功能有点像

app.get('*', (req, res) => {
if(isBot()){
// serve static content
}else{
// serve the index of my hosted app
res.render('/index'); // <--- how to access hosted /index.html in build ??
}
});
exports.app = functions.https.onRequest(app);

我面临的问题是,从Firebase函数中运行的函数中,我无法从";构建";文件夹

我正在尝试类似的东西

app.get('*', (req, res) => {
res.render('../build/index');
});

但这显然不起作用,我不确定什么是最好的方法。。

如有任何帮助/建议,将不胜感激

res.render()接受绝对路径或相对于视图设置的路径。为了正确地遍历文件系统,您需要使用诸如path之类的模块。

以下是如何向上移动到";构建";当前JS文件所在的目录,例如:

const express = require('express');
const path = require('path');
...
app.set('views', path.join(__dirname, '..', 'build')); 

然后渲染你的模板:

res.render('index');

或者,另一种不指定视图的方法是直接渲染模板,如以下示例:

res.render(path.join(__dirname, '..', 'build', 'index'));
res.render(path.join(__dirname, '..', 'build') + '/index');

以下是关于如何使用path.join()的参考资料。

相关内容

  • 没有找到相关文章

最新更新