0
我有一個劇本,即時通訊建設,IM使用包括建模我陣列連接他們回到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>
你的結果從'connection.query()'是異步的。因此,當您的'retrieve()'函數返回時,數據還不可用。您需要使用承諾或回調來將所得到的異步數據傳回給調用者,而不是簡單的返回值。請參閱重複以獲取您的選項的說明。 – jfriend00