Функция не возвращает true/false
Здравствуйте, вот код:
var io = require('socket.io').listen(8080); var sql = require('mysql'); function sqlstart() { var sqlcon = sql.createConnection({ host: 'localhost', user: 'socket', password: 'socket', database: 'socket' }); return sqlcon; } function isauth(value) { var sqlcon = sqlstart(); sqlcon.connect(); sqlcon.query("SELECT * FROM users WHERE sess='"+ value +"'", function (err, rows, fields) { if(err) throw err; if(rows.length>0) { return true; }else{ return false; } }); sqlcon.end(); } io.set('log level', 1); io.sockets.on('connection', function (socket) { var ID = (socket.id).toString().substr(0, 5); socket.json.send({'event': 'connect', 'name': ID}); socket.on('message', function (msn) { if(msn.event === "auth") { if(isauth(msn.sess)) { socket.json.send({'event': 'authSuccess'}); }else{ socket.json.send({'event': 'authError', 'param': 'wrong sess'}); } } }); }); Функция isauth возвращает undefined хотя должна true/false. function isauth(value) { var sqlcon = sqlstart(); sqlcon.connect(); sqlcon.query("SELECT * FROM users WHERE sess='"+ value +"'", function (err, rows, fields) { if(err) throw err; if(rows.length>0) { return true; }else{ return false; } }); sqlcon.end(); } Подскажите что не так. |
thevalakas,
нужно обёртку сделать для асинхронного функционала. https://learn.javascript.ru/promise#промисификация. То есть что-то типа function isauth(value) { return new Promise((resolve, reject) => { var sqlcon = sqlstart(); sqlcon.connect(); sqlcon.query("SELECT * FROM users WHERE sess='"+ value +"'", function (err, rows, fields) { if(err) reject(err); if(rows.length>0) { resolve(true) }else{ resolve(false) } }); sqlcon.end(); }) } и где-то в коде вызывать так isauth('blablabla').then(response => alert(response), err => console.error(err)) |
Спасибо
|
Часовой пояс GMT +3, время: 05:05. |