sql >> データベース >  >> RDS >> Mysql

ノードを備えたシンプルなユーザーログイン検証モジュール

    アプリをよりノードのような方法に再考する必要があると思います(つまり、多くの/ほとんどのことが非同期で発生することを認識するため、通常はこのような関数から「戻る」のではなく、からのコールバックを実行しますnode-mysqlから何を取得する予定かはわかりませんが、おそらくプレーンmysqlモジュールを使用するだけです。次のコードは、完全に必要なものではない可能性が高いですが、正しく考えてもらうことができれば幸いです。

    以下の「return」の使用は実際には結果を返さないことに注意してください(コールバック自体は何も返さないため、undefinedを返すようなものです。returnステートメントがあるので関数を終了します。これにより、面倒なif/を大幅に節約できます。それ以外の場合はブロックします。

    これがお役に立てば幸いですが、ノードの書き込みの非同期性をよりよく理解するために、githubでさまざまなノードプロジェクトを確認することをお勧めします。

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



    1. Mysqlクエリ:ワイルドカードの使用と照合

    2. where句なしで更新

    3. エラー2002(HY000):ソケット'/tmp/mysql.sock'を介してローカルMySQLサーバーに接続できません

    4. SQLは列名を知らずに行を更新します