Подстановка переменных в Azure Devops для js-приложений Frontend

go-oleg в принципе прав, но в эти дни вы (вероятно) не хотите использовать «mongodb» самостоятельно, скорее используйте некоторую фреймворк, которая сделает для вас много «грязной работы».

Например, мангуст является одним из самых распространенных. Это то, что мы имеем в нашем исходном файле server.js:

const mongoose = require('mongoose');
const options = {server: {socketOptions: {keepAlive: 1}}};
mongoose.connect(config.db, options);

Это все, что необходимо для его настройки. Теперь используйте это в любом месте вашего кода

const mongoose = require('mongoose');

И вы получите тот экземпляр, который вы установили с помощью mongoose.connect

1
задан JRichardsz 20 January 2019 в 12:54
поделиться

1 ответ

Сложные приложения, разработанные с использованием реагирующих, vue, angular или других основанных на javascript инфраструктур, имеют ту же проблему или требование, что и серверные приложения (java, nodejs, python и т. Д.): Как читать конфигурации?

[ 1137] Здесь я перечислю некоторые подходы к работе с конфигурациями для фреймворков javascritpt, от простых до управляемых решений. Некоторые из них используются для серверных приложений.

# 1 Глобальные переменные

Поскольку мы говорим об инфраструктурах JavaScript, просто создайте глобальную переменную при запуске вашего приложения, и это будет доступно для всех ваших сценариев:

<html>
  <header>
    <meta charset="utf-8">
    <title>This is title</title>
    <script>
        var myVar = "global value"; // Declare a global variable
    </script>
    <script>
        console.log("from another script:"+myVar);
    </script>
  </header>
  <body>
    Hello world
  </body>
</html>

Конечно, запрограммированный URL в исходном коде не вариант, но следует понимать, что это точка входа в следующие подходы. Почти все они основаны на этом подходе или делают что-то подобное.

# 2 Webpack

Webpack предоставляет нам несколько механизмов, таких как DefinePlugin

new webpack.DefinePlugin({
  API_BASE_URL: JSON.stringify(process.env.API_BASE_URL)
})

DefinePlugin является прямым текстом замена . Webpack найдет идентификатор и заменит его на заданную строку. Следующий пример иллюстрирует, как это работает.

Вы можете использовать эту переменную, как если бы она была глобальной переменной:

$.ajax({
    type: "GET",
    url: API_BASE_URL+'/odds?date=2019-01-19',
    dataType: 'json',
    success: function (data) {
      ...
    }
  });
}

Вот больше механизмов веб-пакета: https://stackoverflow.com/a/40416826/3957754 [ 1143]

Преимущества: - Простой способ установить или определить несколько переменных и использовать их во всем приложении. - Используя CI-сервер, такой как jenkins, вы можете установить все свои конфигурации и построить свой артефакт, а затем развернуть его:

export API_BASE_URL=http://awesome.api.com
export ENDPOINT_DETAIL=/detail
export ENDPOINT_FAVOURITE=/favourite
export MODULES=user,guest,admin,configure

npm run build

Недостатки

  • Переменные вводятся на этапе сборки. Изменения в ваших конфигурациях потребуют новой сборки и повторного развертывания вашего приложения.

# 3 Свойства из SCM, базы данных или файловой системы

Проверьте этот ответ:

# 4 Централизованная и управляемая конфигурация

Основная идея заключается в том, чтобы поместить все ваши конфигурации, настройки или свойства в один сайт, и все ваши приложения должны получить эти значения в безопасный способ. В настоящее время наиболее распространенным методом получения этой конфигурации из конечного приложения является выполнение http-запроса к API-интерфейсу, опубликованному платформой.

Такие платформы являются идеальными партнерами для микросервисной архитектуры. Также я смог использовать его для микро-интерфейсов.

Вот несколько платформ:

Вы можете использовать одну из этих платформ в сочетании с подходом webpack. Поэтому вместо ручного экспорта переменных среды вы можете использовать остальные API на этапе сборки в веб-пакете или на вашем сервере C.I, например, на jenkins.

Преимущества

  • Все комментарии выше.

Недостатки

  • Экспорт уникального файла свойств или экспорт среды вручную можно легко и быстро настроить по сравнению с выполнением на другом сервере, отличном от приложения. [ 1132]

# 5 / settings in your web

Если предположить, что ваша сеть обслуживается по адресу http://myapp.com , вы можете опубликовать другую конечную точку, такую ​​как http : //myapp.com/settings . Эта конечная точка вернет все настройки, требуемые вашим микро-интерфейсом или веб-приложением на СТОРОНА КЛИЕНТА с использованием AJAX .

В вашем приложении javascript, в точке входа (обычно это App.js в реакции, vue и т. Д.), Я имею в виду, что перед механизмами рендеринга вы можете использовать http://myapp.com / settings и выставить как глобальные переменные для вашего приложения. Вы также можете сохранить его в одном из доступных хранилищ, таких как localStorage, sessionStorage и т. Д.

Преимущества

  • Изменения в ваших конфигурациях готовы к использованию без перестроения приложение. Просто выполните обновление страницы, чтобы снова выполнить точку входа в вашем javascript.
  • Вы можете использовать подход № 3 в бэкэнд-контроллере ваших / настроек

Недостатки

  • Пред жестко закодированные переменные загружаются мгновенно по сравнению с HTTP-запросом ajax.
0
ответ дан JRichardsz 20 January 2019 в 12:54
поделиться
Другие вопросы по тегам:

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