Задать вопрос
naghtigall
@naghtigall
Дизайнер и разработчик сайтов

Как вернуть данные из модуля Node.js?

Неделю как начал изучать Node.js - не могу получить данные из модуля. Получаю undefined.
Если в самом модуле вывожу данные rows - все выдает. Но мне нужно передать данные в приложение, где подключен модуль.
Есть app.js (код):
var tasks = require('./tasks');
var list = tasks.list();
console.log(list);

Для него создал модуль tasks.js (код):
var mysql = require('mysql');
var pool  = mysql.createPool({
connectionLimit : 15,
host: 'localhost',
database: 'node',
user: 'node',
password: '123'
});
var Tasks = {

list: function(){
pool.getConnection(function(err, connection) {
  connection.query( 'SELECT * FROM tasks', function(err, rows) {
return rows;
connection.release();
  });

});
},

edit: function(){
},
};

module.exports = Tasks;
  • Вопрос задан
  • 503 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 2
Всё дело в том, что внутри функции tasks.list - асинхронный код. Вам нужно что-то в таком стиле:

list: function(callback) {
    pool.getConnection(function(err, connection) {
        connection.query( 'SELECT * FROM tasks', function(err, rows) {
            callback(rows);
            connection.release();
        });
    });
},


И в вызывающем коде:

var tasks = require('./tasks');
var list = tasks.list(function (rows) {
    console.log(rows);
});


А далее читайте про Promise.
Ответ написан
Комментировать
yarkov
@yarkov
Помог ответ? Отметь решением.
Promise вас спасут. Либо в метод list принимайте коллбэк и его вызывайте.

tasks.js
var mysql = require('mysql');
var pool  = mysql.createPool({
	connectionLimit : 15,
	host: 'localhost',
	database: 'node',
	user: 'node',
	password: '123'
});
var Tasks = {

	list: function(callback){
		pool.getConnection(function(err, connection) {
			connection.query(
				'SELECT * FROM tasks', 
				function(err, rows) {
					connection.release();
					callback(rows);
				});
		});
	},
	
	edit: function(){}
};

module.exports = Tasks;


app.js
var tasks = require('./tasks');
tasks.list(function(list){
	console.log(list);
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
naghtigall
@naghtigall Автор вопроса
Дизайнер и разработчик сайтов
Спасибо за очень быстрый ответ!!!! Очень оперативно!
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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