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 中几乎所有的东西都是异步的。所以,几乎每一个被调用的方法,你都必须指定一个回调方法来处理方法调用的结果。通常,回调函数有两个参数:error、result。因此,由您来检查错误然后处理结果。还有其他节点模块可以使用更简洁的代码(节点承诺),但这超出了您的问题的范围。

作为免责声明,我以前没有使用过 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 回答