@cester

Как достать данные с модуля который дергает базу, nodejs/express?

Добрый день! Очень прошу объяснить!
Что использовать в данном случае, чтобы это был не гавнокод и все работало?
Написал модуль который достает данные из базы. Как получить данные из базы ясно!
не ясно как дальше их передать в другой модуль, как мне получить респонс с этого модуля?
Пожалуйста объясните хотя бы чем это делается, в какую сторону смотреть?
В идеале это был бы какой-то пример.
Спасибо!
Сам модуль
function getDataFromDatabase() {
	var arr = []
	var con = mysql.createConnection(conf.config);
	return con.connect(function (err) {

		if(err) throw err;
		con.query("SELECT DID, DName FROM Device")
		.on('result', function (data) {

			arr.push(data)
		})
		.on('end', function () {
			return JSON.stringify(arr)

		})
	});
}

getDataFromDatabase()
module.exports.getDataFromDatabase = getDataFromDatabase;
  • Вопрос задан
  • 354 просмотра
Решения вопроса 1
@de1m
Можено сделать с callback'ом
var getDataFromDatabase = function () {
  var arr = []
  var con = mysql.createConnection(conf.config);
  con.connect(function (err) {

    if(err) throw err;
    con.query("SELECT DID, DName FROM Device")
    .on('result', function (data) {
      arr.push(data)
    })
    .on('end', function () {
      return callback(null, arr);
    })
    .on('error', function(err){
        return callback (err, null);
    });
}

module.exports = {
    getDataFromDatabase
}


Потом вызываете
var fromDB = require(./modulName);
fromDB.getDataFromDatabase(function(err, result){
    if(err){
        console.log(err);
    } else {
        console.log(result);
    }
})


Можно сделать через промис
var getDataFromDatabase = function (callback) {
    return new Promise((resolve, reject) => {
        var arr = []
        var con = mysql.createConnection(conf.config);
        con.connect(function (err) {

            if (err) throw err;
            con.query("SELECT DID, DName FROM Device")
                .on('result', function (data) {
                    arr.push(data)
                })
                .on('end', function () {
                    return resolve(arr);
                })
                .on('error', function (err) {
                    return reject(err);
                })
        });
    })
}

module.exports = {
    getDataFromDatabase
}

Вызов
var fromDB = require("./modulName");
fromDB.getDataFromDatabase()
    .then(result =>{
        console.log(result);
    },(err)=>{
        console.log(err);
    })


Ну и через асинхрнные функции тоже
var getDataFromDatabase = async function (callback) {
    return new Promise((resolve, reject) => {
        var arr = []
        var con = mysql.createConnection(conf.config);
        con.connect(function (err) {

            if (err) throw err;
            con.query("SELECT DID, DName FROM Device")
                .on('result', function (data) {
                    arr.push(data)
                })
                .on('end', function () {
                    return callback(null, arr);
                })
                .on('error', function (err) {
                    return callback(err, null);
                })
        });
    })
}

module.exports = {
    getDataFromDatabase
}

Вызов
var fromDB = require("./modulName");
var test = await fromDB.getDataFromDatabase();


Возможно я где-то ошибся, писал по памяти.
Вот тут я почти всё писал на асинхронных функциях может быть что-то полезное найдёте.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы