Я хотел бы создать модуль, в котором у меня есть функция, в которую я могу вставить оператор sql и получить результат в виде набора записей. Я новичок в nodeJs и у меня проблемы с доступом к функциям.
мой модуль (sql.js)
var exports = module.exports = {};
sql = require('mssql');
let config = {
user: '###',
password '###'
server: '###',
database: '###',
driver: "###",
options: {
trustedConnection: true
}
};
var db = function (query) {
var rc;
console.info('verbinde');
sql.connect(config, function (err) {
console.info('verbinde');
if (err) console.info(err);
let request = new sql.request();
request.query(query, function (err, recordset) {
if (err) console.info(err);
console.info(recordset);
rc = recordset;
});
})
sql.close();
}
exports.db = db;
вызов
const ipc = require('electron').ipcMain;
const sql = require('../../customModules/sql.js');
console.info(sql.db('SELECT * FROM devices'));
я получаю неопределенный. похоже, что sql.connect не вызывается.





Вы можете получить лучшие результаты, используя Promise. Возможно что-то вроде этого (непроверено):
// sql.js
var db = (query) => new Promise((resolve, reject) => {
console.info('verbinde');
sql.connect(config, function (err) {
console.info('verbinde');
if (err) reject(err);
let request = new sql.request();
request.query(query, function (err, recordset) {
if (err) reject(err);
console.info('got those records!');
resolve(recordset);
});
})
sql.close();
})
// call
const ipc = require('electron').ipcMain;
const sql = require('../../customModules/sql.js');
sql.db('SELECT * FROM devices')
.then(data => console.info(data))
.catch(e => console.info(e));
хорошая ida, но все же sql.connect, похоже, не вызывается: /
dbничего не возвращает. Вы не сможете вернуть результат, который можно было бы зарегистрировать из асинхронной функции.