3

私は、コールバックの機能をよりよく理解するために、本当に単純なnode.jsプロジェクトに取り組んでいます。

ここに次のようなログイン「システム」があるとします。

if( req.query["username"] == "john" && req.query["password"] == "smith" )   {
    req.session.gatekeeper = req.query["username"];
    res.end( "succesfully logged in" );
} else { res.end( "wrong username or password" ); }

これまでのところ、とても簡単です。ここで、単に「john:smith」を使用するのではなく、redisに保存しておくと仮定します。PHPを使用すると、次のように実行できます。

if( $r->get("$usernameIn") == $passwordIn ) {
  $_SESSION['gatekeeper'] = $usernameIn;
  echo "succesfully logged in";
}

しかし今、ノードのredisドキュメント(https://github.com/mranney/node_redis/)を見ると、getコマンドは次のようになっていることがわかります。

client.get("foo", function(err, reply) {
    console.log(reply);
});

この最後のコードで提供した最初のコードを「構造化」する方法を理解するのは、私にとって非常に複雑です。

何か助けはありますか?前もって感謝します。

4

1 に答える 1

2

node.jsのほぼすべてが非同期です。したがって、呼び出されるほぼすべてのメソッドで、メソッド呼び出しの結果を処理するためのコールバックメソッドを指定する必要があります。通常、コールバック関数は2つのパラメーターを取ります:エラー、結果。したがって、エラーをチェックして結果を処理するのはあなた次第です。よりクリーンなコード(ノードpromise )を可能にする他のノードモジュールがありますが、それはあなたの質問の範囲外です。

免責事項として、これまでredisを使用したことがないため、以下のコード例は、上記のコード例とredisnode.jsモジュールの概要に基づいています。

var redis = require("redis"),
    client = redis.createClient();

client.on("connect", function () {
    client.get(userName, function(err,returnedPassword){

      if(password === returnedPassword) {
        req.session.gatekeeper = req.query["username"];
        res.end( "succesfully logged in" );
      } else {
        res.end( "wrong username or password" );
      }
   });
});
于 2012-12-09T16:35:11.507 に答える