Я использую свое приложение Angular 6 в качестве контейнера / контейнера Kubernetes. В этом приложении Angular я пытаюсь получить доступ к объекту конфигурации JSON, чтобы загрузить переменные среды.
Поскольку эти переменные доступны в моем модуле с именем пути 'app / assets / config / config.json', я попытался выполнить запрос GET к этому пути, чтобы вернуть объект JSON.
Этот путь верен, если я получаю к нему доступ через терминал в моем модуле, но я не могу понять, как получить доступ к файлу из моего приложения Angular.
Я попытался добавить параметр --base-href
с помощью npm build
, я изменил строку пути на './assets/config/config/json', 'assets / config / config / json', './app / assets / config / config / json ', ... Все безуспешно.
Код в src/environments/environment.ts
- это место, где я пытаюсь получить доступ к JSON-файлу:
export const environment = new Promise<any>((resolve, reject) => {
var configfile = '/app/assets/config/config.json';
var xhr = new XMLHttpRequest();
xhr.open('GET', configfile);
xhr.onload = function () {
if (xhr.status === 200) {
resolve(JSON.parse(xhr.responseText));
}
else {
reject(`Couldn\'t load the configuration from ${configfile}`);
}
};
xhr.send();
});
Я ожидаю, что путь к файлу config.json будет доступен по тому же пути, что и при просмотре файла в терминале. Однако файл не может быть найден в приложении Angular с этим путем.
ОБНОВЛЕНИЕ - РЕШЕНО
Я попытался открыть файл конфигурации вместо доступа к нему через HTTP. Я использовал описанный метод здесь , 'Чтение локальных файлов JSON в автономных угловых приложениях' .
import * as ConfigJson from "assets/config/config.json";
export const environment = new Promise<any>((resolve, reject) => {
if (ConfigJson) {
resolve(ConfigJson.default);
} else {
reject(`Couldn\'t load the configuration from assets/config/config.json`);
}
});
Хотя этот метод работает для локальных файлов, он все равно не работает для файла, к которому я пытался получить доступ в контейнере. Очевидно, проблема заключалась в неправильном размещении этого файла config.json в контейнере.
После исправления этой проблемы доступ к файлу можно получить не через импорт, а с помощью HTTP-запроса.