node.js и MS SQL Server
Доброго времени суток!
Я за советом! Подскажите пожалуйста какой наиболее удобный модуль node.js можно использовать для работы с БД MS SQL Server при реализации web-приложения на Express. И где можно найти подробную документацию по нему. Спасибо! |
надо посмотреть
https://github.com/typeorm/typeorm потом это должно быть https://docs.nestjs.com/recipes/sql-typeorm если нужен хардкод https://github.com/tediousjs/node-mssql |
Допустим, берем хардкод. Метод request.query("SELECT ...") возвращает объект Promise. Как из него вытащить данные?
|
Немного изучив 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; Насколько хороша такая реализация? |
Да и параметрические SQL запросы можно реализовать только с помощью
request.input(); request.execute(); или есть еще способы? |
лучше потратить время на typeorm
|
У меня типа так:
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()); } }; |
Часовой пояс GMT +3, время: 06:07. |