Angular 7 Universal (рендеринг на стороне сервера) [ОШИБКА ReferenceError: документ не определен] - PullRequest
0 голосов
/ 19 марта 2019

Я реализовал SSR для моего проекта и развернул его на heroku.Теперь, когда я запускаю приложение в heroku logs --tail, у меня запускается много вещей, и это значительно снижает производительность.В большинстве случаев это ошибки:

ОШИБКА ReferenceError: документ не определен

Несмотря на то, что я использую такие конструкции:

    if (isPlatformBrowser(this.platformId)) {
      const overflow = this.isMenuOpened ? 'hidden' : 'auto;';
      this.renderer.setStyle(this.document.body, 'overflow', overflow);
    }

Каждый раз, когда я перезагружаю страницу, эта вещь запускается снова.

В моем файле package.json у меня есть следующие команды для запуска:

"scripts": {
    "ng": "ng",
    "start": "node dist/server.js",
    "build": "npm run build:server:prod && npm run build:browser:prod",
    "build:server:prod": "ng run oilEnergy:server && webpack --config webpack.server.config.js --progress --colors",
    "build:browser:prod": "ng build --prod"
  }

Поэтому, когда Heroku развертывается, она создает сервери папки браузера и компилирует файл server.js, который затем отвечает за запуск моего приложения.

Через некоторое время мое приложение вылетает, и герою показывает Application error вместо моего приложения.

Понятия не имею, почему это происходит.Может, у кого-то была эта проблема раньше?

1 Ответ

0 голосов
/ 19 марта 2019

попробуйте с document вместо this.document

у меня работает следующий код

import { PLATFORM_ID, Inject } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';


constructor(
    @Inject(PLATFORM_ID) private platformId: Object) {
    if (isPlatformBrowser(this.platformId)) {
      this.bodyTag = document.getElementsByTagName('body')[0];
      this.htmlTag = document.getElementsByTagName('html')[0];
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...