1.0.63 • Published 3 years ago

blackbox_server v1.0.63

Weekly downloads
-
License
-
Repository
github
Last release
3 years ago

Проект для быстрого запуска бэкенд сервисов на nodejs и express

Установка

npm install blackbox_server @types/express

В текущей версии поддерживаются

базы данных:

MongoDB

каналы связи:

WebSocket

RabbitMQ

Для конфигурации приложения необходимо в корне разместить файл configApp.json

пример конфига

{
    "PORT": 8080,
    "DB_HOST": "localhost",
    "DB_PORT": 27017,
    "DB_USER": "user_name",
    "DB_PASSWORD": "secret",
    "DB_NAME": "db_name",
    "DB_STRING_OPTIONS": "?authSource=db_name",
    "USE_RABBIT": true,
    "RABBITMQ_URL": "amqp://root:password@localhost:5672",
    "RABBITMQ_RECEIVE_QUEUE_NAME": "q_name",
    "RABBITMQ_RECEIVE_EXCHANGE": "ex_name",
    "RABBITMQ_RECEIVE_ROUTING_KEY": "k_name",
    "RABBITMQ_RECEIVE_BIND_XMTTL": 600000,
    "USE_WS": true,
    "HEADERS": [
        {
            "key": "Access-Control-Allow-Origin",
            "value": "*"
        },
        {
            "key": "Access-Control-Allow-Methods",
            "value": "GET,PUT,POST,DELETE,PATCH,OPTIONS"
        },
        {
            "key": "Access-Control-Allow-Headers",
            "value": "Content-Type"
        }
    ]
}

Функция для чтение настроек

const getConfig = readFromFile<IConfigApp>('./configApp.json')

Подключение основного модуля сервера

import { createApp } from 'blackbox_server'

const BASE_PATH = process.env.BASE_PATH || ''
const NODE_ENV = process.env.NODE_ENV

const App = createApp({ BASE_PATH, NODE_ENV })

export default App

Слушатели rabbit

/**
 * Перехват статуса полученного от rabbitMQ
 * @param msg - сообщение от rabbitMQ
 */
App.addListener('getMessageRabbit', (msg) => {
    const str: string = msg.content.toString()

    console.log(str)
})

Слушатели websocket

/**
 * Перехват нового подключения к ws
 */
App.addListener('wsConnecting', (ws: WebSocket) => {
    ws.send('hello')
})

/**
 * Перехват получения сообщения от ws
 */
App.addListener('getMessageFromWS', (ws: WebSocket, message: string) => {
    console.log(message)
})

Слушатель(логгер) ошибок

App.emit('errorLog', error, 'Reason')

Слушатель(логгер) событий

App.emit('eventLog', 'EVENT', 'Message')

Маршрутизация

import {
    createApp,
    notFound,
    onErrorAfterResponse,
    onErrorRequest,
} from 'blackbox_server'

/**
 * Обработка маршрутов
 */
App.use(`${BASE_PATH}/router`, Router)

/**
 * Обработка ошибок в маршрутах
 */
// 404
App.use(notFound)
// errors
App.use(onErrorRequest)
App.use(onErrorAfterResponse)

Подключение роутера

import { BlackBoxRouter } from 'blackbox_server'
import Controller from '../../controllers/LoginController'

const Router = BlackBoxRouter()

Router.post('/v1/get-token', (request, response, next) =>
    new Controller(request, response, next).getToken()
)

export default Router

Подключение контроллера

import { BlackBoxBaseController } from 'blackbox_server'

export default class LoginController extends BlackBoxBaseController() {
    constructor(request, response, _next) {
        super(request, response)
    }

    getToken() {}
}

Подключение сервиса для моделей

import { BlackBoxBaseServiceModel } from 'blackbox_server'
import { IUsersModel } from '../../models/UsersModel/users-model'
import UsersModel from '../../models/UsersModel'

class UsersService extends BlackBoxBaseServiceModel() {
    constructor(Model: IUsersModel) {
        super(Model)
    }
}

export default new UsersService(UsersModel)

Работа с ошибками в запросах

все возможные классы ошибок указаны в index.d.ts

import { BlackBoxHttpValidationException } from 'blackbox_server'

// валидация email
if (!testEmail(userData?.email)) {
    const error = BlackBoxHttpValidationException()

    throw new error('Ошибка валидации email', this.response)
}

Перечисление событий сервера

enum BlackBoxEventName {
    CLIENT_REQUEST = 'CLIENT_REQUEST',
    SERVER_IS_RUNNING = 'SERVER_IS_RUNNING',
    SERVER_IS_STOPPED = 'SERVER_IS_STOPPED',
    DB_IS_CONNECTED = 'DB_IS_CONNECTED',
    AMQP_IS_RECONNECTING = 'AMQP_IS_RECONNECTING',
    AMQP_IS_CONNECTED = 'AMQP_IS_CONNECTED',
    AMQP_CHANNEL_IS_CLOSED = 'AMQP_CHANNEL_IS_CLOSED',
    AMQP_WORKER_IS_STARTED = 'AMQP_WORKER_IS_STARTED',
}

Перечисления кодов ответа сервера

enum BlackBoxStatusCode {
    OK = 200,
    BAD_REQUEST = 400,
    UNAUTHORIZED = 401,
    FORBIDDEN = 403,
    NOT_FOUND = 404,
    TOO_MANY_REQUESTS = 429,
    INTERNAL_SERVER_ERROR = 500,
}

Перечисления причин ошибок

enum BlackBoxReasonErro {
    REQUEST = 'REQUEST',
    AMQP = 'AMQP',
    AMQP_CHANNEL = 'AMQP_CHANNEL',
    SOCKET = 'SOCKET',
    CONTROLLER = 'CONTROLLER',
}

Использование декораторов

все возможные декораторы указаны в index.d.ts

import {
    BlackBoxBaseController,
    checkAccessIp,
} from 'blackbox_server'

export default class UsersController extends BlackBoxBaseController() {
    constructor(request, response, next) {
        super(request, response, next)
    }

    /**
     * Регистрация пользователя по email
     */
    @checkAccessIp(5, 60000, 'error message')
    registrationByEmail() {
    }
}
1.0.62

3 years ago

1.0.63

3 years ago

1.0.6

3 years ago

1.0.61

3 years ago

1.0.54

3 years ago

1.0.53

3 years ago

1.0.5

3 years ago

1.0.51

3 years ago

1.0.52

3 years ago

1.0.37

3 years ago

1.0.39

3 years ago

1.0.38

3 years ago

1.0.40

3 years ago

1.0.41

3 years ago

1.0.33

3 years ago

1.0.36

3 years ago

1.0.35

3 years ago

1.0.34

3 years ago

1.0.3

3 years ago

1.0.297

3 years ago

1.0.296

3 years ago

1.0.295

3 years ago

1.0.31

3 years ago

1.0.286

3 years ago

1.0.285

3 years ago

1.0.287

3 years ago

1.0.282

3 years ago

1.0.281

3 years ago

1.0.284

3 years ago

1.0.283

3 years ago

1.0.2791

3 years ago

1.0.29

3 years ago

1.0.28

3 years ago

1.0.277

3 years ago

1.0.276

3 years ago

1.0.293

3 years ago

1.0.292

3 years ago

1.0.294

3 years ago

1.0.279

3 years ago

1.0.278

3 years ago

1.0.291

3 years ago

1.0.263

3 years ago

1.0.262

3 years ago

1.0.261

3 years ago

1.0.22

3 years ago

1.0.21

3 years ago

1.0.26

3 years ago

1.0.25

3 years ago

1.0.24

3 years ago

1.0.23

3 years ago

1.0.275

3 years ago

1.0.253

3 years ago

1.0.252

3 years ago

1.0.255

3 years ago

1.0.27

3 years ago

1.0.254

3 years ago

1.0.271

3 years ago

1.0.273

3 years ago

1.0.251

3 years ago

1.0.272

3 years ago

1.0.257

3 years ago

1.0.256

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago