Как получить доступ к объекту JSON в ConfigMap из приложения Angular? - PullRequest
0 голосов
/ 24 мая 2019

Я использую свое приложение 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-запроса.

...