2016-05-14 67 views
0

我目前正在使用socket.io-client/socket.io登錄系統,問題是當我啓動服務器時,執行查詢,檢索數據庫中的當前數據,如果用戶註冊他們無法登錄,直到重新啓動服務器,如果我使用:從Mysql查詢更新檢索到的數據? Node.js node-mysql

SELECT * FROM mytable ORDER BY id DESC LIMIT 1 

則只有剛剛註冊可以登錄,而不是已註冊用戶的用戶,我怎麼能解決這個問題?

我有它,所以當用戶名和密碼從客戶端提交到服務器時,包含Mysql代碼的函數被執行,邏輯上我認爲這會再次運行查詢爲每個新的連接,但它不。

我的代碼:

服務器:

console.log("Berdio - A Awesome socket server for everyone!") 
console.log("Created with Love, by OzzieDev! Enjoy the awesomeness!") 

var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 
function dosql(){ 
var mysql = require('mysql') 
var connection = mysql.createConnection({ 
host : 'localhost', 
user : 'root', 
password : 'root', 
database : 'Berd' 
}) 
connection.query('SELECT * FROM Berd_Data', function(err, rows, fields,  result){ 
if (err) throw err; 
var usrname = rows[0].Username 
var psword = rows[0].Password 
global.usrname = usrname 
global.psword = psword 
}); 
} 
io.on('connection', function(socket){ 
}) 
socket.on('user-name', function(data){ 
dosql() 

    socket.broadcast.emit('user-connected',data.u); 

console.log(u,p) 
var u = data.u 
var p = data.p 
console.log(u,p + " " + "emitted Data"); 
    if (u === global.usrname && p === global.psword){ 
    socket.emit('AuthGood') 
    }else{ 
    socket.emit('AuthFail') 
    } 
socket.on('msg',function(data){ 
var message = data.message 
if (typeof message !== "undefined"){ 
    socket.broadcast('newmsg',msg) 
} 
    if(message === "quit"){ 
process.exit(); 
} 
}) 


}); 
}); 

http.listen(3000, function(){ 
console.log('listening on *:3000'); 
}); 

客戶:

var socket = require('socket.io-client')('http://127.0.0.1:3000'); 
    socket.on('connect_error', function(){ 
    console.log('Failed to establish a connection to the servers, or lost connection'); 

return process.exit();  
}); 
var prompt = require("prompt-sync")() 
    console.log("Your Ip has been logged, but encrypted. Please see website for more info") 
var news = "Add news: Will be from database. " 
var username = prompt("Username>: ") 
var password = prompt("Password>: ") 

if (typeof username, password !== "undefined"){ 
socket.emit('request') 
socket.emit('user-name', { u: username, p: password }); 
} 
socket.on('AuthGood',function(socket){ 
console.log("Your details have been authenticated, hello again!") 
var message = prompt("message>: ") 
}) 
socket.on('AuthFail',function(socket){ 
console.log("Your details failed to authenticate, Wrong Pass/Username combination, quitting!") 
return process.exit(); 
}) 


if (typeof message !== "undefined"){ 
socket.emit('msg',{m: message}) 
} 
socket.on('user-connected',function(data){ 
var userconn = data.username 
console.log(username +" " +"Has joined us!") 

}) 
socket.on('newmsg',function(data){ 
var newmsg = data.msg 

console.log("-----------------------------------") 
console.log(username+">:" + " " +msg) 
}) 
+0

你的問題很不清楚。爲什麼在服務器啓動時查詢?發佈一些代碼示例。您可能會遭受糟糕的代碼設計,我們需要審查。 – vladaman

+0

會做,對不起。 – FlerrElectronics

+0

更確切地說,看起來只有第一行,在這種情況下是:Ozzie和密碼,數據庫中的任何事項之後的任何內容都不會被檢索。我很可能使用錯誤的查詢。 – FlerrElectronics

回答

0

使用MySQL查詢:

SELECT * FROM Berd_Data WHERE `Username` = ?', [u] 

固定的問題。