Как изменить URL одного сервера на URL другого сервера, если сервер не работает в angular6

== проверяет ссылки на объекты, .equals() проверяет строковые значения.

Иногда кажется, что == сравнивает значения, потому что Java делает некоторые закулисные вещи, чтобы убедиться, что одинаковые строки в строке являются одним и тем же объектом.

Для Например:

String fooString1 = new String("foo");
String fooString2 = new String("foo");

// Evaluates to false
fooString1 == fooString2;

// Evaluates to true
fooString1.equals(fooString2);

// Evaluates to true, because Java uses the same object
"bar" == "bar";

Но будьте осторожны с нулями!

== обрабатывает строки null в порядке, но вызов .equals() из пустой строки приведет к исключению:

String nullString1 = null;
String nullString2 = null;

// Evaluates to true
System.out.print(nullString1 == nullString2);

// Throws a NullPointerException
System.out.print(nullString1.equals(nullString2));

Итак, если вы знаете, что fooString1 может но не менее очевидно, что он проверяет значение null (из Java 7):

System.out.print(Objects.equals(fooString1, "bar"));
0
задан pktechie 18 January 2019 в 09:00
поделиться

2 ответа

Вы можете проверить, не получен ли запрос, и попытаться отправить запрос на другой сервер, но что, если работает только четвертый сервер, и вам все время приходится совершать три неудачные попытки, чтобы достичь рабочего? Похоже, не самый эффективный способ.

Вместо этого я бы добавил балансировщик нагрузки NGinx с проверкой работоспособности: http://nginx.org/en/docs/http/load_balancing.html

0
ответ дан Nick Surmanidze 18 January 2019 в 09:00
поделиться

Для моей вышеупомянутой проблемы я получил решение, как показано ниже, для этого мы должны получить помощь от JAVASCRIPT.

шаг 1: ->

создайте файл env.js в каталоге index.html, как показано ниже.

(function (window) {
    window.__env = window.__env || {};

    // API url
    window.__env.apiUrl = "http://RestWebService";

    // Whether or not to enable debug mode
    // Setting this to false will disable console output
    window.__env.enableDebug = true;
  }(this));

Смысл вышеупомянутого файла env.js заключается только в том, что мы создаем одну глобальную переменную apiUrl для хранения URL нашего сервера. Так что мы можем получить доступ к этой переменной глобально. Затем мы добавляем элемент в раздел в нашем index.html для загрузки env.js до загрузки Angular:

<html>

  <head>
    <!-- Load environment variables -->
    <script src="env.js"></script>
  </head>

  <body>
    ...
    <!-- Angular code is loaded here -->
  </body>  

</html>  

По умолчанию файлы JavaScript, такие как env.js, не копируются в выходной каталог когда мы создаем наше приложение.

Чтобы убедиться, что файл копируется в выходной каталог, когда мы запускаем ng build или ng serve, мы должны добавить его в раздел активов конфигурации сборки нашего приложения в angular.json:

angular. json file

{
  "projects": {
    "app-name": {
      "architect": {
        "build": {
          "options": {
            "assets": [
              "src/favicon.ico",
              "src/assets",
              "src/env.js"
            ]
          }
          "configurations": {
            "production": {
              "fileReplacements": [
                {
                  "replace": "src/environments/environment.ts",
                  "with": "src/environments/environment.prod.ts"
                }
              ],
              // ...
            }
          }
        }
      }
    }
  }
}

шаг 2: ->

Создайте один сервис на имя любого, в моем случае я создал его как env.service.ts в каталоге app.module .ts. это служебный файл, который будет использоваться для получения значения URL нашего сервера, который хранится в apiUrl (файл env.js).

env.service.ts

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class EnvService {

  // The values that are defined here are the default values that can
  // be overridden by env.js

  // API url
  public apiUrl = '';

  // Whether or not to enable debug mode
  public enableDebug = true;

  constructor() {
  }

}

шаг 3: ->

Создать файл поставщика услуг в том же каталоге env.service.ts.

env.service.provider.ts

import { EnvService } from './env.service';

export const EnvServiceFactory = () => {  
  // Create env
  const env = new EnvService();

  // Read environment variables from browser window
  const browserWindow = window || {};
  const browserWindowEnv = browserWindow['__env'] || {};

  // Assign environment variables from browser window to env
  // In the current implementation, properties from env.js overwrite defaults from the EnvService.
  // If needed, a deep merge can be performed here to merge properties instead of overwriting them.
  for (const key in browserWindowEnv) {
    if (browserWindowEnv.hasOwnProperty(key)) {
      env[key] = window['__env'][key];
    }
  }

  return env;
};

export const EnvServiceProvider = {  
  provide: EnvService,
  useFactory: EnvServiceFactory,
  deps: [],
};

EnvServiceProvider: -> Это угловой рецепт провайдера для регистрации EnvServiceFactory с внедрением угловой зависимости как фабрики для создания экземпляра EnvService.

EnvServiceFactory: -> Это фабрика, которая считывает значения среды из окна .__ env и создает экземпляр класса EnvService.

Таким образом, по всей сводке этого файла env.service.provider.ts мы экспортируем функцию EnvServiceFactory, которая создает экземпляр класса EnvService и копирует все значения из объекта window .__ env в экземпляр EnvService.

Наконец, чтобы зарегистрировать EnvServiceProvider как рецепт в системе внедрения зависимостей Angular, мы должны указать его в качестве провайдера в массиве провайдеров нашего приложения:

app.module.ts file

import { NgModule } from '@angular/core';  
import { EnvServiceProvider } from './env.service.provider';

@NgModule({
  imports: [ // ... ],
  providers: [EnvServiceProvider],
})
export class AppModule {} 

Теперь мы можем получить доступ к переменным среды из любого места нашего приложения, внедрив EnvService, я использую его, как показано ниже.

service.ts file

import { EnvService } from '../env.service';

   constructor(private _httpClinet: HttpClient, private env: EnvService) {
    }

emplLoginCheckUrl = this.env.apiUrl+"/checkValidUser";

 validateUserDetails(employeeDetails): Observable<any> {
        console.log(this.emplLoginCheckUrl);
        return this._httpClinet.post(this.emplLoginCheckUrl, employeeDetails);
    }

Вот и все для шага 3.

шаг 4: ->

наконец, что мы должны сделать перед обслуживанием приложения, мы должны собрать приложение с помощью ng build --prod, чтобы получить папку dist, которая содержит файл env.js. оттуда мы можем изменить наши URL, если вы измените URL, он автоматически применит новый измененный URL в нашем приложении.

ДЛЯ ПОЛУЧЕНИЯ ДОПОЛНИТЕЛЬНОЙ ИНФОРМАЦИИ посетите сайт ниже, спасибо Юргену Ван де Море.

https://www.jvandemo.com/how-to-use-environment-variables-to-configure-your-angular-application-without-a-rebuild/

0
ответ дан pktechie 18 January 2019 в 09:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: