如何使用angular universal在服务器端呈现中加载json

如何使用angular universal在服务器端呈现中加载json,json,node.js,angular,server-side-rendering,angular-universal,Json,Node.js,Angular,Server Side Rendering,Angular Universal,我正在为我的学士学位论文的一个大学项目构建一个angular2通用应用程序。我想用angular universal在服务器上渲染此应用程序。如何在服务器上加载.json文件?在我没有服务器端呈现的版本中,我使用一个服务获取带有http.get请求的JSON,如下所示: @Injectable() export class VideoService { private movieSubject: BehaviorSubject<Video[]> = new BehaviorSubj

我正在为我的学士学位论文的一个大学项目构建一个angular2通用应用程序。我想用angular universal在服务器上渲染此应用程序。如何在服务器上加载.json文件?在我没有服务器端呈现的版本中,我使用一个服务获取带有http.get请求的JSON,如下所示:

@Injectable()
export class VideoService {

private movieSubject: BehaviorSubject<Video[]> = new BehaviorSubject<Video[]>([]);
  movies$: Observable<Video[]> = this.movieSubject.asObservable();

constructor(private http : Http) {
    this.http.get('./json/movies/movies.json').subscribe(
      res => this.movieSubject.next(res.json()),
      error => console.error(error)
    )
}
}
在模板中,我使用以下代码将数据注入另一个组件:

<app-info-site *ngIf="movieInfos" [movieInfos]="movieInfos"></app-info-site>

当我将此代码用于angular universal时,它仍然可以工作,但是属于json的站点部分第一次加载到客户端,并且由于ngIf,服务器忽略了这部分代码,因此我从服务器获得了一个不完整的.html文件。如何在服务器上加载该文件以从中获取完整的.html站点


PS:我对angular2和服务器端渲染完全陌生。

首先,我建议您迁移到Angular4,因为服务器端渲染现在是Angular4的一部分,而Angular4不需要Angular Universal

你也可以结帐

要在现有结构中应答,您应该通过从实现OnInit将http调用从构造函数移动到ngOnInit

import { OnInit } from '@angular/core';

export class YourComponent implements OnInit {
    ...other variable and functions...
    ngOnInit() {
        this.http.get('./json/movies/movies.json').subscribe(
            res => this.movieSubject.next(res.json()),
            error => console.error(error)
        );
    }
}

如果您需要任何其他支持,请告诉我…

我记得最近尝试过类似的操作,但遇到一个错误,说我需要使用绝对路径。不使用abs的情况下,是什么使其工作。路径?干杯(目前不是在PC上/无法在我的设置中尝试代码)@rex查看您发布的文章,您实际上没有使用Angular Univeral进行服务器端渲染。我使用的是Angular 6,我很想使用Universal来构建简单的NodeJS服务器。
import { OnInit } from '@angular/core';

export class YourComponent implements OnInit {
    ...other variable and functions...
    ngOnInit() {
        this.http.get('./json/movies/movies.json').subscribe(
            res => this.movieSubject.next(res.json()),
            error => console.error(error)
        );
    }
}