Node JS, return из модуля

226
20 февраля 2018, 08:26

Добрый день. Я новичок в 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.

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

Answer 1

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

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);
READ ALSO
Почему возникает ошибка типа “cannot read property style of null”?

Почему возникает ошибка типа “cannot read property style of null”?

Выдаёт ошибку типа "cannot read property style of null"Что пытаюсь сделать: после движения мышкой к курсору должно прилипнуть изображение (сначала прописал...

195
Определить состояние чекбокса

Определить состояние чекбокса

Есть кастомный чекбокс на сайте, по клику на который необходимо узнать активный он или нетПишу следующие:

248
Как сделать пересчёт в таблице? JQuery

Как сделать пересчёт в таблице? JQuery

Доброго времени сутокНиже код таблички по ссылке файлик (обычный текстовой), в файле табличка которая строится по виду Excel таблицы

180