crazy_str
@crazy_str
web-программист

Как правильно отдать данные в json клиенту node.js?

Всем привет, имеется вопрос. Хочу сделать обновление ленты новостей на socket.io но возник вопрос как это все отдавать в json формате? и что лучше использовать pool или статичный sql?
вот код server.js
var io = require('socket.io').listen(3000),
	mysql = require('mysql');

var pool  = mysql.createPool({
  	host            : 'localhost',
  	user            : 'root',
  	password        : '',
  	database        : 'test',
	port			: 3306
});
// Навешиваем обработчик на подключение нового клиента
io.sockets.on('connection', function (socket) {
	var time = (new Date).toLocaleTimeString();
	// Посылаем клиенту сообщение о том, что он успешно подключился
	socket.json.send({'event': 'connected', 'time': time});
	setInterval(function() {
		socket.broadcast.json.send(updateFeed());
	}, 5000);
});
function updateFeed() {
	pool.getConnection(function(err, connection) {
		connection.query('SELECT `u`.`member`, `u`.`login`, `n`.`text`, `n`.`time` FROM `news` as `n` LEFT JOIN `members` as `u` ON (`u`.`member` = `n`.`member_id`) ORDER BY `n`.`n_id` DESC LIMIT 0, 5', function(err, rows) {
			var gdata = "";
			[rows].forEach(function(item, key, rows){
				for(var index in item)
				{
if(item.hasOwnProperty(index)) {
					gdata += {
						index: item[index]
					};
}
				}
			});
			return gdata;
			connection.release();
		  });
	});
};

и код клиента
socket = io.connect('localhost:3000');

    socket.on('connect', function () {
        socket.on('message', function (msg) {
            console.log(msg);
		});
	});

дело в том что он отдает мне null. Что делаю не так?
  • Вопрос задан
  • 677 просмотров
Решения вопроса 1
var gdata = "";

gdata += { к строчке прибавляем объект??? получает строчку???
index: item[index]
};

socket.broadcast.json.send(updateFeed() выозвращается строка,ожидается объект);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
SagePtr
@SagePtr
Еда - это святое
Смешиваете асинхронные функции с синхронными.
updateFeed ничего не вернёт, так как закончит работу раньше, чем находящиеся в ней асинхронные функции.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы