路由时超时。 Angular 9 通用 + Firebase

Posted

技术标签:

【中文标题】路由时超时。 Angular 9 通用 + Firebase【英文标题】:Timeout when routing. Angular 9 Universal + Firebase 【发布时间】:2020-08-04 17:19:21 【问题描述】:

我正在尝试设置 Angular 9 Universal + Firebase 应用程序。我已将通用包添加到我的项目和 Firebase 云功能以支持 s-s-r。这是我的云功能的代码:

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

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

export const s-s-r = functions.runWith( memory: "2GB", timeoutSeconds: 120 ).https.onRequest(universal);

我的 Firebase 配置:


  "hosting": 
    "public": "dist/browser",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      
        "source": "**",
        "function": "s-s-r"
      
    ]
  

构建过程没有错误,应用程序似乎工作正常,但路由不起作用。主要路线 (/) 加载良好,我可以毫无错误地导航到其他路线,但如果我尝试在新选项卡中打开任何其他路线(例如 /books)或重新加载已打开的路线,我将收到超时异常。这是屏幕截图:

我不知道为什么会出现这个错误。我已经尝试将超时时间增加到 120 秒,但没有帮助。任何建议我该如何解决?

【问题讨论】:

这里没有足够的根源来解决这个问题。 Angular Universal 一定有一些丢失的日志/错误。我对这个设置了解不多。 “应用程序”甚至会返回一个承诺吗? @Kato 我只得到这个错误,我怎样才能得到更多的日志? 【参考方案1】:

如果您使用的是 Angular Universal 的脚手架版本,并且您没有更改 server.ts 文件中的任何内容,则必须将调用通用函数的 result 传递给 @987654321 @函数。

所以,你必须改变这个:

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

export const s-s-r = functions.runWith( memory: "2GB", timeoutSeconds: 120 ).https.onRequest(universal);

对此(你必须调用通用函数):

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

export const s-s-r = functions.runWith( memory: "2GB", timeoutSeconds: 120 ).https.onRequest(universal());

为什么这是必要的?您的 app 函数不接收任何参数,并返回一个 server 对象(它实际上是一个 Express-application 对象)。 onRequest 函数接收一个匿名函数,该函数接收一个request 和一个response。所以将app 函数传递给onRequest 没有多大意义。

我昨天遇到了同样的问题,我真的不知道 Firebase 是如何为根路由 (/) 提供服务的,而不是任何子路由。

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

卢西亚诺。

【讨论】:

以上是关于路由时超时。 Angular 9 通用 + Firebase的主要内容,如果未能解决你的问题,请参考以下文章

Angular 9 嵌套延迟加载模块,带有嵌套路由器出口

路由组件的Angular 2“动画幻灯片”

如何使用 Firebase 功能部署 Angular 9 通用应用程序

安装nodejs后无法安装@angular/cli@9.1.8

Angular 9路由给出无错误的空白页面

Angular - 在 OnInit 上进行不同 API 调用的通用组件