2016-05-14 15 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] 

は、問題を修正しました。

関連する問題