2012-12-09 75 views
3

我正在研究非常简单的node.js项目以更好地理解其回调函数。了解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/)为节点,我看到得到的命令是这样的:

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

它真的很复杂,我听不懂如何“结构”我提供了这最后一个第一个代码。

任何帮助?提前致谢。

+0

你想让你的redis查询适合你的第一个代码吗?你把(或打算放入)'foo'是什么价值? – Matt

+0

是的。在“富”我想把req.query [“用户名”] –

+0

在redis –

回答

2

几乎node.js中的所有内容都是异步的。所以,几乎所有被调用的方法都必须指定一个回调方法来处理方法调用的结果。通常,回调函数有两个参数:错误,结果。因此,您需要检查错误并处理结果。还有其他节点模块允许使用更简洁的代码(​​),但这不在您的问题的范围之内。

作为免责声明,我之前没有使用过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"); 
     } 
    }); 
}); 
+0

凉爽,谢谢!精神上进入这种异步状态仍然有点困难,来自php。无论如何,你应该看看redis,它像node.js –

+0

这样的面包和黄油。就个人而言,我认为当你连续有多个时,回调有点难以阅读。我非常喜欢承诺。我通常使用https://github.com/kriszyp/node-promise。这里是人们在谈论他们的stackoverflow的链接:http://stackoverflow.com/questions/4296505/understanding-promises-in-node-js – pgreen2