Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

módulo de validação de login de usuário simples com nó


Acho que você vai querer repensar seu aplicativo de uma maneira mais parecida com um nó (ou seja, uma que reconheça que muitas/a maioria das coisas acontecem de forma assíncrona, então você geralmente não está "retornando" de uma função como essa, mas fazendo um retorno de chamada de Não tenho certeza do que você planeja obter do node-mysql, mas eu provavelmente usaria apenas o módulo mysql simples. O código a seguir provavelmente ainda não é totalmente o que você deseja, mas espero que faça você pensar sobre isso corretamente.

Observe que o uso de 'return' abaixo não está realmente retornando um resultado (o retorno de chamada em si não deve retornar nada e, portanto, é como retornar indefinido. As instruções de retorno estão lá para que você saia da função, o que economiza muito if/ mais bloqueia.

Espero que isso ajude, mas sugiro examinar vários projetos de node no github para ter uma ideia melhor da natureza assíncrona de escrever para node.
function validate(username, password, callback){
    var connection = mysql.createConnection({ user:'foo',
                            password: 'bar',
                            database: 'test',
                            host:'127.0.0.1'});

    connection.connect(function (err){
        if (err) return callback(new Error('Failed to connect'), null);
        // if no error, you can do things now.

        connection.query('select username,password from usertable where username=?',
                username,
                function(err,rows,fields) {
                    //  we are done with the connection at this point), so can close it
                    connection.end();

                    // here is where you process results
                    if (err)
                        return callback(new Error ('Error while performing query'), null);
                    if (rows.length !== 1)
                        return callback(new Error ('Failed to find exactly one user'), null);

                    // test the password you provided against the one in the DB.
                    // note this is terrible practice - you should not store in the
                    // passwords in the clear, obviously. You should store a hash,
                    // but this is trying to get you on the right general path

                    if (rows[0].password === password) {
                        // you would probably want a more useful callback result than 
                        // just returning the username, but again - an example
                        return callback(null, rows[0].username);
                    } else {
                        return callback(new Error ('Bad Password'), null);
                    }

                });


    });
};