Man*_*uel 5 angular-http angular-http-interceptors angular-universal angular angular-httpclient
我只是尝试使用 Angular Universal 预渲染一个组件,该组件使用 httpClient 从/static应用程序本身的文件夹中获取数据。
我猜该文件不可访问,因为应用程序在预渲染时没有在任何服务器上运行。获取路径是相对的。稍后在远程服务器上获取文件有效,但是在预渲染期间“远程服务器”不可用还是?如何使这工作?
我确实收到了一个错误 [ERROR],这是由httpClient.get(). 捕获错误错误消息为空。
基本上我有服务
doReqeust() = {
return this.httpClient.get("./static/get.json")
}
Run Code Online (Sandbox Code Playgroud)
并在组件中
onInit() {
this.data = this.myService.doRequest();
}
Run Code Online (Sandbox Code Playgroud)
并且视图比它通过异步管道绑定
{{ data.response.title | async }}
Run Code Online (Sandbox Code Playgroud)
静态是项目中的静态文件夹。
您可以访问assets文件夹中的静态文件
请注意,使用 Angular Universal 时,请求 URL 必须是绝对的。请求 URL 将是执行预渲染的 Web 服务器之一(例如http://localhost:4000。
服务.ts
import {Inject, Injectable, Optional, PLATFORM_ID} from '@angular/core';
import {isPlatformBrowser} from "@angular/common";
import {HttpClient} from "@angular/common/http";
constructor(private http: HttpClient, @Inject(PLATFORM_ID) private platformId: Object,
@Optional() @Inject('serverUrl') protected serverUrl: string)
{
}
doRequest()
{
let baseUrl = isPlatformBrowser(this.platformId)? '' : this.serverUrl;
return this.http.get(baseUrl + '/assets/static/file.json');
Run Code Online (Sandbox Code Playgroud)
您需要提供serverUrl的值。这应该在您的后端完成。假设你使用的是nodejs
服务器.ts
extraProviders: [
//...
{
provide: 'serverUrl',
useValue: `http://localhost:${NODEJS_PORT}`
},
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1580 次 |
| 最近记录: |