Mysql
 sql >> Database >  >> RDS >> Mysql

modulo di convalida dell'accesso utente semplice con nodo

Penso che vorrai ripensare la tua app in un modo più simile a un nodo (cioè uno che riconosca che molte/la maggior parte delle cose accadono in modo asincrono, quindi di solito non stai "tornando" da una funzione come questa, ma eseguendo una richiamata da it. Non sono sicuro di cosa prevedi di ottenere da node-mysql, ma probabilmente userei solo il semplice modulo mysql. Il codice seguente molto probabilmente non è ancora del tutto quello che desideri, ma si spera che ti faccia pensare correttamente.

Nota che l'uso di "return" di seguito non sta effettivamente restituendo un risultato (il callback stesso non dovrebbe restituire nulla, e quindi è come restituire undefined. Le istruzioni di ritorno sono lì quindi esci dalla funzione, risparmiando un sacco di noiosi if/ altrimenti blocca.

Spero che questo aiuti, ma suggerirei di guardare vari progetti di nodi su github per avere un'idea migliore della natura asincrona della scrittura per il nodo.

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

                });


    });
};