Вызов MSSQL процедур через NodeJS

Для прямого запроса к базе данных в NodeJS доступна библиотека mssql

// https://github.com/tediousjs/node-mssql
npm install mssql

Далее формируем config для подключения к БД:

const config = {
    user: 'логин',
    password: 'пароль',
    server: 'dbsrv\\sql2017',
    database: 'MobileService',
    options: {
        enableArithAbort: false
    }
}

Пример выполнения процедуры:

const sql = require('mssql');
sql.connect(config, function (err) {
    var request = new sql.Request();
    request.input('User', '5B26F42C-C6E7-4B92-AFED-972EAB0B095A')
        .input('Date', '02-07-2020')
        .execute('[dbo].[UI_Get_Statistics_By_User]', (err, result) => {
            if (!err) {
                var items = result.recordset;
                console.log(items);
            } else {
                console.error(err);
            }
            sql.close();
        });
});

Распределение нагрузки в IIS для NodeJS

Главная проблема javascript это то что он однопоточный. Эта же проблема есть и в приложения написанных на NodeJS.

Итак нам понадобится:

  • виртуальная машина с Windows Server 2012 или выше
  • установленная IIS
  • приложение на NodeJS (в примере будет использоваться фреймворк Express)
  • и «магия»

Инструкцию по установке Windows и настройке IIS описывать не буду, это можно найти в интернете. Приступаем сразу к запуску NodeJS приложения.

Читать далее «Распределение нагрузки в IIS для NodeJS»

Запуск nodejs служб на ubuntu 18

В директории /lib/systemd/system требуется создать файл с расширением .service

Файл должен содержать следующую информацию

[Unit]
Description=docs service by nodejs
After=network-online.target

[Service]
User=www-data 
Restart=on-failure
WorkingDirectory=/var/www/docs
ExecStart=/usr/bin/node /var/www/docs/bin/www

[Install]
WantedBy=multi-user.target

где,

  • User — имя пользователя от имени которого запускается служба
  • WorkingDirectory — каталог с приложением, где nodejs

После этого требуется перезапустить daemon

systemctl daemon-reload
systemctl restart docs 
systemctl status docs

, где docs имя службы

Удаленная отладка nodejs приложений

Предварительно требуется установить node-inspect

 npm install -g node-inspect 

Далее от имени sudo запускаем команду

sudo node --inspect bin/www

где bin/www исполняемый файл (он может заканчивать на js)

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

Читать далее «Удаленная отладка nodejs приложений»

Передача данных по websocket

Реализация передачи данных по websocket выполнена при помощи библиотеки https://socket.io.

Примечание: символ ~/ будет означать корневой адрес

Шаг 1. Подключение библиотеки socket.io

<script src="~/socket.io/socket.io.js"></script>

Шаг 2. Инициализация соединения

var socket = io.connect('http://domain.com', {
path: '/virtaulPath' + '/socket.io',
transports: ['websocket']
});

, где

  • http://domain.com — корневой адрес сервиса
  • ‘/virtualPath’ — виртуальная директория, если есть, иначе String.Empty
Читать далее «Передача данных по websocket»

Временная зона для PostgreSql+NodeJs

Если на сервере БД хранить дату с типом timestamp without time zone, и использовать модуль nodejs pg то дата будет возвращается в формате локального компьютера, а нужно что бы было также в UTC

Решение

Устанавливаем moment

npm install monent

Настраиваем pg

pg.types.setTypeParser(1114, str => moment.utc(str + '+00:00').format()); 

Оригинал статьи: Working with PostgreSQL’s timestamp without timezone in Node