如何解决Angular 8-使用HttpClient从资产目录获取json配置文件,部署到IIS时找不到/assets/config.json
我有一个正在工作的Angular项目。对我的新要求是重写ConfigService
以从资产目录中的config.json文件读取JSON对象。使用ng serve
时,此代码有效。但是,当我ng-build
应用程序并通过IIS后端进行部署时,它为http://localhost:1509/assets/config.json
给出了404错误。该项目是从一个名为“客户端”的包含文件夹提供的。当我将生成的main-es2015.js
文件的ConfigService
修改为从/Client/assets/config.json
获取时,前端将从配置中按需加载。
在代码指向我的测试环境和生产环境的正确目录的位置,我该如何重写呢?我不确定这是应该在前端还是后端进行更改。
import { Injectable } from '@angular/core';
import { HttpService } from './http.service';
@Injectable({
providedIn: 'root'
})
export class ConfigService {
public appConfig: any;
constructor(private _http: HttpService) { }
getConfig(): Promise<boolean> {
return new Promise((resolve,reject) => {
this._http.Get('/assets/config.json')
.toPromise()
.then(data => {
console.log(data);
this.appConfig = data;
resolve();
})
});
}
getBaseUrl() {
console.log(this.appConfig.baseUrl)
return new Promise((resolve,reject) => {
try {
this._http.baseUrl = this.appConfig.baseUrl;
resolve();
}
catch (error) {
console.error(error);
reject();
}
});
}
loadAll() {
return new Promise((resolve,reject) => {
this.getConfig().then(() => {
this.getBaseUrl().then(() => {
resolve();
});
}).catch(e => {
throw e;
});
});
}
}
export function configServiceFactory(config: ConfigService) {
return () => config.loadAll();
}
现在,配置文件仅包含基本API端点。
{
"baseUrl": "http://localhost:1509/"
}
我的应用程序从中部署的目录具有以下结构:
Client (folder)
assets (folder)
config.json
index.html
main-es2015.js
main-es5.js
main-es5.js.map
...
...
解决方法
我想一种解决方案是在失败时将回退写入getConfig方法。但这绝对是解决此问题的不当方法。
getConfig(): Promise<boolean> {
return new Promise((resolve,reject) => {
this._http.Get('/assets/config.json')
.toPromise()
.then(data => {
console.log(data);
this.appConfig = data;
resolve();
}).catch(() => {
this._http.Get('/Client/assets/config.json')
.toPromise()
.then(data => {
console.log(data);
this.appConfig = data;
}).catch(error => {
console.error(error);
reject();
});
});
});
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。