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, время: 08:35. |