2016-05-29 1 views
0

Goodmorning,включают обыкновение возвращать данные из массива

У меня есть вопрос/проблема с сценарием, который им зданием, им, используя для моделирования включает в себя мои массивах ан вернуть их к server.js

данные показывают на консоль, но не на посетителей, на простой веб-странице, если я поместил запрос и мое моделирование в файл server.js, он работает, есть ли у кого-то причина, почему include не вернет результаты с запросом?

Server.js

var io = require('socket.io').listen(3000); 
var data_model = require("./data_model.js"); 
io.sockets.on('connect', function(socket) { 
console.log('There is a connection'); 
io.emit("data", "There is a connection"); 
console.log(data_model.retrieve()); // THIS LINE WORKS, 
socket.emit("dataretrieve", JSON.stringify(data_model.retrieve())); 
}); 

моя модель данных

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


var data_model = { 

    retrieve: function() { 

    connection.query('SELECT * FROM data_retrieve', function(err, rows, fields, data) { 

      if (rows.length === 0) { 

      } else { 

       dataretrieve = {}; 

       dataretrieve["data_retrieve"] = {}; 

       dataretrieve["data_retrieve"] = { 
        id: rows[0].id, 
        msg: rows[0].msg 
       }; 

       return JSON.stringify(dataretrieve); 

      } 

     }); 
    } 
}; 

module.exports = data_model; 

текущей страницы:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">  </script> 
<script src="http://172.0.2.13:3000/socket.io/socket.io.js"></script> 
<script> 
    $(document).ready(function(){ 
    var socket = io.connect('http://172.0.2.13:3000'); 
    socket.on('data', function(data){ 

    document.getElementById('connection').innerHTML = data; 

    }); 
    socket.on('dataretrieve', function(dataretrieve){ 
    console.log(dataretrieve); //WONT SHOW THE DATA 
    }); 

    }); 
</script> 
<body> 
    <pre> 
<div id="connection"></div> 
    <div id="dataretrieve"></div> 
+0

Ваш результат от 'connection.query()' является асинхронным. Таким образом, данные еще не доступны, когда возвращается функция 'retrieve()'. Вам нужно использовать обещания или обратный вызов, чтобы передать полученные асинхронные данные обратно вызывающему, а не простое возвращаемое значение. См. Дубликат для описания ваших опций. – jfriend00

ответ

0
var data_model = { 

    retrieve: function(cb) { 

    connection.query('SELECT * FROM data_retrieve', function(err, rows, fields, data) { 

      if (rows.length === 0) { 

      } else { 

       dataretrieve = {}; 

       dataretrieve["data_retrieve"] = {}; 

       dataretrieve["data_retrieve"] = { 
        id: rows[0].id, 
        msg: rows[0].msg 
       }; 

       cb(JSON.stringify(dataretrieve)); 

      } 

     }); 
    } 
}; 

код изменения вызова извлечения из

socket.emit("dataretrieve", JSON.stringify(data_model.retrieve())); 

в

data_model.retrieve(function(data){ 
    socket.emit("dataretrieve",data); 
}) 
+0

Можете ли вы дать мне больше информации, потому что я не понимаю, что вы имели в виду. –

Смежные вопросы