0

Добрый день. Я новичок в Node , сильно не критикуйте. Столкнулся с проблемой при возврате значения функции при вызове из модуля.

Например есть модуль:

function GetTableData() {


var connection = mysql.createConnection({
    host: setup.host,
    user: setup.user,
    password: setup.password,
    database: setup.database
});

connection.connect();
var query = connection.query("SELECT * FROM tables", function (error, result) {
    if (error) { console.log(error.message); throw error; }

    jdata = JSON.stringify(result);

    console.log('mod_mysql_GetTables:AppData:' + jdata);
    return jdata;

});

connection.end(function () {
        console.log('Connection Close!');

    });
function GetTest(){
    var x =5 ;
    return x;
}

module.exports.GetTableData = GetTableData();
module.exports.GetTest = GetTest();

Этот модуль я вызываю в основном файла index.js по средствам require()

var mod_mysql = require('./mod_mysql');
var tables = mod_mysql.GetTableData;
console.log(tables);

В итоге я получаю undefined

Делаю тоже самое с функцией GetTest, все работает нормально.

Если запускать модуль без подключения то все работает нормально, выводятся данные из mysql.

Подскажите что я делаю не так.

Pavel Mayorov
  • 58,537
icedev
  • 430

1 Answers1

3

Смотрите, если Вы экспортируете модуль, и при этом в конце функции ставите (), другими словами, вызываете функцию, то Вы экспортируете не саму функцию, а результат ее выполнения.

var mod_mysql = require('./mod_mysql');
var tables = mod_mysql; /// без GetTableData;
console.log(tables);

Если же Вы, при экспорте функции, не вызываете ее, другими словами, после ее название не ставите (), тогда Вы экспортируете саму функцию. В результате, Вы сможете запустить ее тогда, когда посчитаете нужным. Например, :

var mod_mysql = require('./mod_mysql');
var tables = mod_mysql.GetTableData;
var f = tables();
console.log(f);

Рабочий пример: две функции экспортируются разными способами и по разному используются. Код модуля:

function GetTableData(z) {
    return z+1;
}

function GetTest(){
    var x =5 ;
    return x;
}

module.exports.GetTableData = GetTableData;
module.exports.GetTest = GetTest();

Код исполняемого файла:

var mod_mysql = require('./7.js');
var GetTableData = mod_mysql.GetTableData;
var GetTest = mod_mysql.GetTest;
console.log(GetTableData(1));
console.log(GetTest);
Dmytro
  • 6,756
  • Спасибо. Теперь стало понятно вы экспорту. Проблема в том что функция возвращает undefined – icedev Feb 19 '18 at 08:03
  • А код у Вас рабочий? У меня он выдает синтаксические ошибки. Я дополнил ответ рабочим примером. – Dmytro Feb 19 '18 at 08:09
  • @Дмытрык обратите внимание: он пытается сделать return из асинхронной функции – Pavel Mayorov Feb 19 '18 at 08:13
  • Код рабочий. console.log('mod_mysql_GetTables:AppData:' + jdata); это работает при выполнении модуля, но значение функции почему то не возвращается – icedev Feb 19 '18 at 08:13
  • @icedev обратите внимание на ссылки в комментариях под вашим вопросом – Pavel Mayorov Feb 19 '18 at 08:14
  • @Дмытрык спасибо. направление понятно буду читать – icedev Feb 19 '18 at 08:20