Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.10.2019, 17:31
Новичок на форуме
Отправить личное сообщение для Frol Посмотреть профиль Найти все сообщения от Frol
 
Регистрация: 31.05.2018
Сообщений: 9

node.js и MS SQL Server
Доброго времени суток!
Я за советом! Подскажите пожалуйста какой наиболее удобный модуль node.js можно использовать для работы с БД MS SQL Server при реализации web-приложения на Express. И где можно найти подробную документацию по нему.
Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 09.10.2019, 18:05
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

надо посмотреть
https://github.com/typeorm/typeorm
потом это должно быть
https://docs.nestjs.com/recipes/sql-typeorm
если нужен хардкод
https://github.com/tediousjs/node-mssql
Ответить с цитированием
  #3 (permalink)  
Старый 09.10.2019, 19:02
Новичок на форуме
Отправить личное сообщение для Frol Посмотреть профиль Найти все сообщения от Frol
 
Регистрация: 31.05.2018
Сообщений: 9

Допустим, берем хардкод. Метод request.query("SELECT ...") возвращает объект Promise. Как из него вытащить данные?
Ответить с цитированием
  #4 (permalink)  
Старый 10.10.2019, 11:13
Новичок на форуме
Отправить личное сообщение для Frol Посмотреть профиль Найти все сообщения от Frol
 
Регистрация: 31.05.2018
Сообщений: 9

Немного изучив mssql и Promise получил вот такой рабочий вариант:
const mssql = require('mssql');
const config = {
    server: "localhost",
    user: "sa",
    database: "support",
    password: "01470258"
}

class DB {
    constructor() {
        this.pool = new mssql.ConnectionPool(config);
        this.poolConnect = this.pool.connect().then(() => {
            console.log("Успешное подключение к базе данных");
            this.connect = true;
            this.request = this.pool.request();
        }, () => {
            console.log("Не удалось подключиться к базе данных");
            this.connect = false;
        });
    }

    async query(sql, cb) {
        await this.poolConnect;
        if (this.connect) {
            this.request.query(sql).then((result) => {
                console.log("Успешный запрос");
                cb(result.recordset);
            }, () => {
                console.log("Ошибка при обработке запроса");
                cb(null, "Ошибка при обработке запроса");
            });
        } else {
            cb(null, "Ошибка подключения к БД");
        };
    }
}

module.exports = DB;


Насколько хороша такая реализация?
Ответить с цитированием
  #5 (permalink)  
Старый 10.10.2019, 13:00
Новичок на форуме
Отправить личное сообщение для Frol Посмотреть профиль Найти все сообщения от Frol
 
Регистрация: 31.05.2018
Сообщений: 9

Да и параметрические SQL запросы можно реализовать только с помощью
request.input();
request.execute();
или есть еще способы?
Ответить с цитированием
  #6 (permalink)  
Старый 10.10.2019, 13:36
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

лучше потратить время на typeorm
Ответить с цитированием
  #7 (permalink)  
Старый 10.10.2019, 17:28
Аспирант
Отправить личное сообщение для sniffysko Посмотреть профиль Найти все сообщения от sniffysko
 
Регистрация: 20.10.2009
Сообщений: 79

У меня типа так:
const sql = require('mssql');

let _instance = null;

class AppSql{
	constructor(){
		const sqlConfig = {
			user: config.sql.user,
			password: config.sql.password,
			database: config.sql.database,
			server: config.sql.server,
			domain: config.sql.domain,
			parseJSON: config.sql.parseJSON,
			options: {
				trustedConnection: config.sql.trustedConnection,
			}
		};

		this._pool = null;

		(async () => {
			try {
				this._pool = await new sql.ConnectionPool(sqlConfig).connect();
				this._pool.on('error', (err) => {
					LOG.logError( MSG.fgetMsg('eSqlCommon', err.stack) );
				})
				LOG.logInfo( MSG.getMsg('iSqlConnected') );
			} catch (err) {
				LOG.logError( 'AppSql.constructor. \n' + MSG.fgetMsg('eSqlConnect', err.stack) );
			}
		})();
	}

	get pool(){
		return this._pool;
	}


	async querySimple(q, params){
		await this._pool; 
		try {
			const request = this._pool.request();
			if(params){
				for (const key in params) {
					const value = params[key];
					request.input(key, value);
				}
			}
			const result = await request.query(q);
			return Promise.resolve(result);
		} catch (err) {
			console.log(q, err);
			return Promise.reject(err);
		}
	}

}


sql.on('error', (err) => {
	LOG.logError( 'SQL Emitter.\n' + MSG.fgetMsg('eSqlCommon', err.stack) );
});

// Экспорт инстанса
module.exports = {
	getInstance: () => {
		return _instance || (_instance = new AppSql());
	}
};
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SSO авторизация с кроссдоменными запросами Windows server + Node.js + Angular sniffysko Angular.js 0 28.03.2019 12:42
SSO авторизация с кроссдоменными запросами Windows server + Node.js + Angular sniffysko Node.JS 0 28.03.2019 12:28
Прошу раскритиковать наслойку работы с MySql. Alasdair Node.JS 4 21.11.2015 20:06
Построение диаграмм из MS SQL Server EvgLuch Общие вопросы Javascript 5 22.01.2014 04:16
Востребованность разработчиков на Node.js danik.js AJAX и COMET 7 08.12.2012 22:49