2013-06-25 5 views
0

РЕШИТЬ: Ответ: socket.on (функция (данные 'клиентов) {document.write (JSON.stringify (данные));} );Node.js/Socket.io/Mysql для печати в формате JSON

Я хочу, чтобы, как это вывод (только часть жирного шрифта) на экране в виде JSON:

отладки - WebSocket письменность 5 ::: { "имя": "клиенты", "Args": [[{ "ID": 6, "имя": "демо 3"}, { "ID": 7, "имя": "demo1"}]]}

Я должен что-то отсутствует причина I просто не могу понять, почему он не печатает как JSON. У меня есть 3 файла:

app.js (сервер):

var fs = require('fs'); 
var db = require("./db.js"); 

var http = require('http').createServer(function handler(req, res) { 
    fs.readFile(__dirname + '/index.html', function (err, data) { 
     if (err) { 
      res.writeHead(500); 
      return res.end('Error loading index.html'); 
     } else { 
      res.writeHead(200); 
      res.end(data); 
     } 
    }); 
}).listen(3000); 
// ----------------------------------- 
var io = require('socket.io').listen(http); 
io.sockets.on('connection', function (client) { 
    console.log('Client connected'); 
    db.get_employees(function (employees) { 
     io.sockets.emit('clients', employees); 
    }); 
}); 

db.js (подключение к базе данных):

// ----------------------------------- 
var mysql = require('mysql'); 
var client = mysql.createConnection({ 
    user: 'xxxx', 
    password: 'yyyy', 
    host: '123.45.67.89', 
    database: 'zzzz' 
}); 
// ----------------------------------- 
exports.get_employees = function (callback) { 
    client.query("select id, name from clients", function (err, results, fields) { 
     callback(results); 
    }); 
} 

И index.html:

<script src="http://192.168.2.25:3000/socket.io/socket.io.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 

<script> 
$(document).ready(function() { 
    var socket = io.connect('http://192.168.2.25:3000'); 
    socket.on('clients', function(data) { 
    $.each(data, function(i, obj) { 
     // document.write(obj);  // Gets me [object Object][object Object] 
     // document.write(obj.name) // Gets me name column 
     // document.write(obj.email) // Gets me email column 
     // document.write(obj.xxxxx) // Gets me xxxxx column 
     // document.write(JSON.stringify(obj)); //Prints as JSON but structure is wrong and it is a html string not as JSON output 

    }); 
    }); 
}); 
</script> 

У меня возникли проблемы с тем, почему я не могу напечатать его как JSON. См. Прокомментированные строки index.html. Также я хочу, чтобы это был чистый вывод JSON моей базы данных, а не как html.

io.sockets.emit («клиенты», сотрудники); в App.js испускает правильный json-формат, который я хочу, но я не могу его выводить. Я получаю [Object Object] или Undefined. Должен быть способ сделать это, потому что, если мне придется его вручную структурировать, это сделает его неэффективным.

Любая помощь будет оценена по достоинству.

+0

JSON.stringify - это правильная функция для использования. Что вы имеете в виду, это печатает его как html? Можете ли вы привести пример того, что он выводит? –

+0

Он выводит: {"id": 6, "name": "demo3"} {"id": 7, "name": "demo1"}, но должен выводиться следующим образом: {"id": 6, "name ":" demo3 "}, {" id ": 7," name ":" demo1 "} (с запятой), но идеально, я хочу, чтобы это было так, как отладочные отпечатки на консоли: {" name ":" clients "," args ": [[{" id ": 6," name ":" demo 3 "}, {" id ": 7," name ":" demo1 "}]]} однако страница похожа на html-текст распечатаны. Мне нужно это как JSON (как изменить заголовок страницы тоже) –

+0

Я могу добавить вручную, но потом он добавит до конца, поэтому мне нужно добавить еще одну функцию, которая удалит ее, а затем преобразует ее в заголовок JSON , Кажется, слишком много обходных решений необходимо, должен быть более простой и менее ресурсоемкий способ. –

ответ

1

Это потому, что вы выводите каждый объект JSON на свой собственный. Попробуйте выполнить строгую переменную «данные», например.

$(document).ready(function() { 
    var socket = io.connect('http://192.168.2.25:3000'); 
    socket.on('clients', function(data) { 
    document.write(JSON.stringify(data)); 
    }); 
}); 
+0

Это дает круговую ошибку ссылки: TypeError: Преобразование круговой структуры в JSON –

+0

@SumitBisht - ошибка, которую вы получаете, не связана с проблемой с вышеуказанным кодом. Это означает, что у вас есть круговая ссылка в объекте (в данном случае «данные»), которую вы пытаетесь стягивать. Сделайте поиск ошибки, и вы, вероятно, получите лучшее объяснение. –

+0

О, извините, это было .. Я пытался получить информацию о самом объекте сокета. Получение данных в порядке, спасибо –