我正在研究非常简单的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);
});
对于我来说,理解如何“构建”我在最后一个代码中提供的第一个代码真的很复杂。
有任何帮助吗?提前谢谢。
答案 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" );
}
});
});