Спецификация среды c конфигурация источников данных в приложении loopback4 - PullRequest
0 голосов
/ 02 мая 2020

Я только что начал свой первый петлевой проект и выбрал версию loopback4 для приложения. Это чисто серверное приложение, которое будет взаимодействовать с базами данных (Redis и mongodb) и будет вызывать внешние службы API из-за архитектуры микросервисов.

Теперь у меня есть 3 источника данных в моем приложении, то есть mongodb, Redis и REST. на основе источника данных для вызова внешних служб. Я сталкиваюсь с двумя проблемами при движении вперед.

1. Конфигурации среды c конфигурации источников данных: Мне нужно поддерживать конфигурацию для всех трех источников данных в соответствии с переменной среды NODE_ENV. Для lb3 я нашел это решение,

https://loopback.io/doc/en/lb3/Environment-specific-configuration.html#data -source-configuration

, которое не работает в lb4. Одним из решений является добавление файлов конфигурации с именами mongodb.staging.json и mongodb.production.json и одинаковыми для источников данных redis и rest в каталоге src/datasources, загрузка этой конфигурации в соответствии с переменной NODE_ENV с использованием условия if и передача ее в конструктор источника данных. Это работает, но не кажется хорошим, так как приложение должно сделать это.

Может кто-нибудь предложить мне эквивалентное решение lb3 для вышеупомянутого?

2. Вызов внешних API через источник данных: в lb4. Для вызова внешних сервисов рекомендуется иметь отдельный источник данных на основе REST и его сервис для вызова через контроллер. Теперь в конфигурации источника данных REST необходимо определить шаблон всех вызовов API, которые будут происходить с внешней службой https://loopback.io/doc/en/lb4/REST-connector.html#defining -a-custom-method-using-a-template .

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

Может кто-нибудь сказать мне более надежную и более чистую альтернативу вышеуказанной проблемы ?

Заранее спасибо !!

1 Ответ

0 голосов
/ 03 мая 2020

Использование переменных среды в конфигах источника данных

Конфигурация источника данных - это просто JSON файл, который импортируется в *.datasource.ts. Следовательно, вы можете заменить этот JSON файл файлом Typescript и импортировать его соответствующим образом. LoopBack 4 не предоставляет никакого механизма подстановки пользовательских переменных. Вместо этого рекомендуется использовать process.env.

. Последние версии CLI заменяют конфигурацию JSON в пользу использования одного файла Typescript:

import {inject} from '@loopback/core';
import {juggler} from '@loopback/repository';

const config = {
  name: 'db',
  connector: 'memory',
};

export class DbDataSource extends juggler.DataSource {
  static dataSourceName = 'db';
  static readonly defaultConfig = config;

  constructor(
    @inject('datasources.config.db', {optional: true})
    dsConfig: object = config,
  ) {
    super(dsConfig);
  }
}

Внедрение зависимостей в конструктор позволяет программно переопределить конфигурацию через контейнер приложения Io C.

Дополнительные сведения

Вызов внешних API без соединителя REST

Соединитель REST обеспечивает четко определенный интерфейс для запроса внешних API, чтобы можно было выполнять проверку перед отправкой запроса.

Если это Это не выгодно, можно создать новый Сервис в качестве оболочки для HTTP-запросов. Оттуда вы можете предоставлять свои собственные функции для обработки запросов к внешнему API. Поскольку Службам не нужно следовать жесткой структуре, можно настроить ее в соответствии с вашим вариантом использования.

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


В целом, в LoopBack 4 не существует 100% правильного или неправильного способа выполнения определенных действий. Следовательно, платформа предоставляет многочисленные способы решения одной и той же проблемы.

...