Mysql
 sql >> Datenbank >  >> RDS >> Mysql

einfaches Validierungsmodul für die Benutzeranmeldung mit node

Ich denke, Sie sollten Ihre App auf eine Node-ähnlichere Weise überdenken (d. h. eine, die erkennt, dass viele/die meisten Dinge asynchron ablaufen, sodass Sie normalerweise nicht von einer Funktion wie dieser "zurückkehren", sondern einen Rückruf von it. Ich bin mir nicht sicher, was Sie von node-mysql erhalten möchten, aber ich würde wahrscheinlich einfach das einfache mysql-Modul verwenden. Der folgende Code ist höchstwahrscheinlich immer noch nicht ganz das, was Sie wollen, aber er wird Sie hoffentlich dazu bringen, richtig darüber nachzudenken.

Beachten Sie, dass die Verwendung von 'return' unten nicht wirklich ein Ergebnis zurückgibt (der Callback selbst sollte nichts zurückgeben, und daher ist es so, als würde er undefiniert zurückgeben. Die return-Anweisungen sind da, damit Sie die Funktion beenden, was eine Menge mühsamer if/ sonst blockiert.

Ich hoffe, das hilft, aber ich würde vorschlagen, sich verschiedene Node-Projekte auf GitHub anzusehen, um ein besseres Gefühl für die asynchrone Natur des Schreibens für node.

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

                });


    });
};