理解node.js回调结构

时间:2012-12-09 16:05:38

标签: node.js asynchronous callback

我正在研究非常简单的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);
});

对于我来说,理解如何“构建”我在最后一个代码中提供的第一个代码真的很复杂。

有任何帮助吗?提前谢谢。

1 个答案:

答案 0 :(得分:2)

node.js中几乎所有内容都是异步的。因此,几乎每个被调用的方法,都必须指定一个回调方法来处理方法调用的结果。通常,回调函数有两个参数:error,result。因此,您需要检查错误然后处理结果。还有其他节点模块可以提供更清晰的代码(node promises),但这超出了您的问题范围。

作为免责声明,我之前没有使用过redis,所以下面的代码示例基于上面的代码示例以及redis node.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" );
      }
   });
});