Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Функция не возвращает true/false (https://javascript.ru/forum/node-js-io-js/64236-funkciya-ne-vozvrashhaet-true-false.html)

thevalakas 29.07.2016 07:55

Функция не возвращает 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();
}


Подскажите что не так.

destus 29.07.2016 08:57

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

thevalakas 01.08.2016 15:01

Спасибо


Часовой пояс GMT +3, время: 11:41.