@skbkontur/node-core

Основные компоненты для разработки на Node.js

Usage no npm install needed!

<script type="module">
  import skbkonturNodeCore from 'https://cdn.skypack.dev/@skbkontur/node-core';
</script>

README

Быстрый старт Node.js приложений на инфраструктуре Контура

В библиотеке есть всё что вам надо:

  • Логирование
  • Метрики и системный мониторинг
  • Обработка ошибок
  • Инициализация ClusterConfig'а
  • Трассировка запросов
  • Готовый провайдер для ClusterClient

Библиотека композирует модули и инициализирует компоненты.

Документация:

  • Гайд по инфраструктуре: guide.md
  • Подробнее о конфигурации Node.core: config.md
  • Управление стратегиями клиентов сервисов при помощи провайдеров: providers.md
  • О трассировках: tracing.md

Внутри данного модуля реализован набор middleware для веб фреймворка koa2. Если вы используете другой фремворк, вам необходимо реализовать middleware для него.

Пример использования с koa2:

const core = require('@skbkontur/node-core')

const auth = require('./src/middlewares/authentication')
const router = require('./src/middlewares/router')

const config = require('./src/config')

const Koa = require('koa')
const app = new Koa()

core.initClusterConfig(config.zone)
  .then((clusterConfig) => core.runApp(config, clusterConfig))
  .then(async function createApp(coreApp) {
    const { logger } = coreApp

    core.useCore(app, coreApp)

    app.use(auth)
    app.use(router())

    app.listen(config.port, () => {
      logger.info(`Application started at http://localhost:${config.port}`)
    })
  })

Компоненты

Ниже приведен список всех компонентов coreApp. Апи для их использования можно найти в соответствующих репозиториях:

https://www.npmjs.com/package/@skbkontur/cluster-config-client https://www.npmjs.com/package/@skbkontur/winston-kontur-logstash https://www.npmjs.com/package/@skbkontur/span-aggregator-client https://www.npmjs.com/package/@skbkontur/monitoring-client

const {    
  logger,
  clusterConfig,
  config,
  monitor,
  monitoringClient,
  spanAggregator,
  options
} = coreApp

Доступ к компонентам внутри koa.context

Если вы используете middleware для koa2 из этого репозитория, то вы имеете доступ к компонентам coreApp из контекста koa.

Пример:

app.use((ctx) => {
  ctx.core.logger.info('hello')
  ctx.core.clusterConfig.getSettingsByPrefix('topology/graphite-prod/')
  ctx.core.monitoringClient.send('metricName', 5)
})