【问题标题】:Updating retrieved data from a Mysql Query? Node.js node-mysql更新从 Mysql 查询中检索到的数据? Node.js 节点-mysql
【发布时间】:2016-05-14 18:59:16
【问题描述】:

我目前正在使用 socket.io-client/socket.io 登录系统,问题是当我启动服务器时,执行查询,检索数据库中的当前数据,如果用户注册他们不是能够登录,直到服务器重新启动,如果我使用:

 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)
})

【问题讨论】:

  • 你的问题很不清楚。为什么要查询服务器何时启动?发布一些代码示例。您可能遭受了我们需要审查的糟糕代码设计的困扰。
  • 更准确地说,似乎只有第一行,在这种情况下是 : Ozzie 和密码 ,数据库中该条目之后的任何内容都不会被检索。我很可能使用了错误的查询。
  • 我会假设这个问题的解决方案目前未知?

标签: javascript mysql node.js node-mysql


【解决方案1】:

使用MySql查询:

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

解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-14
    • 2016-03-07
    相关资源
    最近更新 更多