从不使用 Angular 服务器端渲染的资产中获取文件
Posted
技术标签:
【中文标题】从不使用 Angular 服务器端渲染的资产中获取文件【英文标题】:Fetching File from Assets not Working with Angular Server Side Rendering 【发布时间】:2020-02-12 02:02:36 【问题描述】:我在运行时使用以下代码从资产文件夹加载json
文件:
initializeApp = () =>
new Promise(async resolve =>
this.settings await this.http.get(`/assets/file.json`).toPromise();
resolve();
);
当使用ng serve
编译 Angular 应用程序时,此代码可以正常工作。不过我也想支持server side rendering。使用npm run build:s-s-r
构建服务器并随后使用npm run serve:s-s-r
运行它时,我在节点服务器上收到以下错误:
ERROR Error: Uncaught (in promise): Error
at resolvePromise (/project/services/frontend/dist/server.js:1003:31)
at /project/services/frontend/dist/server.js:913:17
at rejected (/project/services/frontend/dist/server/main.js:136313:93)
at ZoneDelegate.invoke (/project/services/frontend/dist/server.js:542:26)
at Object.onInvoke (/project/services/frontend/dist/server/main.js:118689:33)
at ZoneDelegate.invoke (/project/services/frontend/dist/server.js:541:52)
at Zone.run (/project/services/frontend/dist/server.js:301:43)
at /project/services/frontend/dist/server.js:1061:34
at ZoneDelegate.invokeTask (/project/services/frontend/dist/server.js:574:31)
at Object.onInvokeTask (/project/services/frontend/dist/server/main.js:118670:33)
【问题讨论】:
【参考方案1】:使用 Angular Universal 时,URL 必须是绝对的。因此,要么在您的配置中的某处拥有基本 URL,要么从底层网络服务器中检索它,如 documentation 中所示
【讨论】:
【参考方案2】:在服务器端添加resolve或reject,因为您的promise没有被任何resolver或reject处理。
【讨论】:
我已经打电话给resolve()
。我还尝试添加try catch
和reject
,但没有帮助
抱歉,如果您误解了我的意思,但添加 resolve
或 reject
并不能解决问题。但我感谢你的帮助:)以上是关于从不使用 Angular 服务器端渲染的资产中获取文件的主要内容,如果未能解决你的问题,请参考以下文章
使用 Angular Universal 进行服务器端渲染的防御性编程思路
Angular5服务器端渲染,外部Api数据服务在s-s-r中不起作用