路由时超时。Angular 9 Universal + Firebase

问题描述 投票:2回答:1

我正在尝试建立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 firebase google-cloud-functions angular-universal
1个回答
1
投票

如果你使用的是angular universal的脚手架版本,并且你没有修改server.ts文件中的任何内容,你必须通过 结果 调用您的通用函数到 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 函数接收一个匿名函数,该函数接收一个 request 和a response. 所以通过 app 功能,以 onRequest 并没有什么意义。

我昨天也遇到了这个一模一样的问题,真不知道为什么Firebase能够服务于根路由(),而不服务于任何子路由。

总之,我希望这个答案能解决你的问题!

Luciano。

© www.soinside.com 2019 - 2024. All rights reserved.