路由超时。Angular 9 Universal + Firebase

3

我正在尝试设置Angular 9 Universal + Firebase 应用程序。 我已经将Universal 包添加到我的项目中,并添加了Firebase云函数以支持SSR。 这是我的云函数代码:

import * as functions from 'firebase-functions';
import * as path from 'path';

const universal = require(path.resolve(__dirname, '../dist/server/main')).app;

export const ssr = functions.runWith({ memory: "2GB", timeoutSeconds: 120 }).https.onRequest(universal);

我的 Firebase 配置:
{
  "hosting": {
    "public": "dist/browser",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "function": "ssr"
      }
    ]
  }
}

编译没有错误,应用程序似乎正常工作,但路由不起作用。主路由(/)加载得很好,我可以导航到其他路由而没有错误,但是如果我尝试在新标签页中打开任何其他路由(例如/books),或重新加载已经打开的路由,就会收到超时异常。这里是截图: error 我不知道为什么会出现这个错误。我已经尝试将超时时间增加到120秒,但没有帮助。有什么建议可以解决吗?

这里没有足够的信息来确定根本原因。Angular Universal可能有一些缺失的日志/错误信息。我对这个设置不是很了解;“app”是否返回一个Promise? - Kato
@Kato,我只得到了这个错误,如何获取更多的日志? - Nikita
你解决了吗? - Ross Rawlins
1个回答

4
如果你使用的是 Angular Universal 的脚手架版本,并且没有对 server.ts 文件做出任何更改,那么你需要将调用通用函数后的 result 传递给 onRequest 函数。
因此,你需要将以下代码修改为:
const universal = require(path.resolve(__dirname, '../dist/server/main')).app;

export const ssr = functions.runWith({ memory: "2GB", timeoutSeconds: 120 }).https.onRequest(universal);

你需要调用这个通用函数:

const universal = require(path.resolve(__dirname, '../dist/server/main')).app;

export const ssr = functions.runWith({ memory: "2GB", timeoutSeconds: 120 }).https.onRequest(universal());

为什么需要这样做?你的app函数不接收任何参数,并返回一个server对象(实际上是Express应用程序对象)。onRequest函数接收一个匿名函数,它接收requestresponse。因此将app函数传递给onRequest没有太多意义。

昨天我遇到了完全相同的问题,我真的不知道Firebase如何提供根路径(/),但不提供任何子路径。

无论如何,我希望这个答案能解决你的问题!

Luciano。


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