在Angular中调试HTTP服务器错误的更好方法?

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

简短的背景故事

我已经对Angular 8应用程序进行了多次升级,例如服务器端渲染和Google Analytics(分析)。正如大多数开发人员所做的那样,我先编写代码,然后进行测试,然后继续执行下一个任务。通常,我在开发时会使用ng serve运行该应用程序。

使用服务器端渲染,以测试速度,延迟加载图像等,您需要使用在生成的JS文件上运行的节点快速服务器。构建完成后,我使用Node prerender(我的js文件是prerender.js)来查看应用程序在服务器上的预渲染效果。

当我运行此命令时,不会出现任何错误,并且我知道我的prender文件将在端口4000上启动本地服务器。

问题

[运行节点快递服务器时出现错误,而使用ng serve运行时却未得到错误,我最近看到一个错误消息:

Unhandled Promise rejection: Cannot read property 'subscribe' of undefined ; Zone: <root> ; Task: Promise.then ; Value: TypeError: Cannot read property 'subscribe' of undefined
    at new ApplicationRef (C:\4towerdevelopment\dist-stage\server\main.js:45910:37)
    at _createClass (C:\4towerdevelopment\dist-stage\server\main.js:37184:20)
    at _createProviderInstance (C:\4towerdevelopment\dist-stage\server\main.js:37138:26)
    at initNgModule (C:\4towerdevelopment\dist-stage\server\main.js:37044:32)
    at new NgModuleRef_ (C:\4towerdevelopment\dist-stage\server\main.js:38176:9)
    at Object.createNgModuleRef (C:\4towerdevelopment\dist-stage\server\main.js:38159:12)
    at NgModuleFactory_.create (C:\4towerdevelopment\dist-stage\server\main.js:50821:25)
    at C:\4towerdevelopment\dist-stage\prerender.js:29175:43
    at ZoneDelegate.invoke (C:\4towerdevelopment\dist-stage\prerender.js:481:26)
    at Object.onInvoke (C:\4towerdevelopment\dist-stage\prerender.js:28683:33) TypeError: Cannot read property 'subscribe' of undefined
    at new ApplicationRef (C:\4towerdevelopment\dist-stage\server\main.js:45910:37)
    at _createClass (C:\4towerdevelopment\dist-stage\server\main.js:37184:20)
    at _createProviderInstance (C:\4towerdevelopment\dist-stage\server\main.js:37138:26)
    at initNgModule (C:\4towerdevelopment\dist-stage\server\main.js:37044:32)
    at new NgModuleRef_ (C:\4towerdevelopment\dist-stage\server\main.js:38176:9)
    at Object.createNgModuleRef (C:\4towerdevelopment\dist-stage\server\main.js:38159:12)
    at NgModuleFactory_.create (C:\4towerdevelopment\dist-stage\server\main.js:50821:25)
    at C:\4towerdevelopment\dist-stage\prerender.js:29175:43
    at ZoneDelegate.invoke (C:\4towerdevelopment\dist-stage\prerender.js:481:26)
    at Object.onInvoke (C:\4towerdevelopment\dist-stage\prerender.js:28683:33)

这最接近让我了解实际导致问题的原因是让我知道某个地方的提供程序正在导致此错误。看起来有些东西应该是可观察的,而不是订阅。除此之外,我想我只是开始寻找我的提供者。我的问题是:

  1. [使用ng serve开发时,如何强制Angular引发此错误?
  2. 如果我做不到,除了梳理每个提供程序之外,还有没有更好的方法来调试当前错误?还是至少可以通过某种方式判断出导致问题的服务?

谢谢。

node.js angular serverside-rendering
1个回答
0
投票

看起来好像是ApplicationRef触发了错误,并且该类由Angular内核内部提供。

在类的构造函数中可能会失败,并且在区域可观察对象上有对subscribe的一些调用。我认为您不会在源代码中找到与该错误直接相关的任何内容。它看起来像一个构建配置问题。

https://github.com/angular/angular/blob/bb52fb798c8578c461d21aee2b7623232184a5d3/packages/core/src/application_ref.ts#L562

我不知道什么可能会导致此问题,但是我将使用SSR启动一个新项目并将差异与您当前的项目进行比较。

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