【问题标题】:understanding node.js callback structure理解 node.js 回调结构
【发布时间】:2012-11-27 03:59:52
【问题描述】:

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

但是现在,通过查看 node 的 redis 文档 (https://github.com/mranney/node_redis/),我看到 get 命令是这样的:

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

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

有什么帮助吗?提前致谢。

【问题讨论】:

  • 你希望你的 redis 查询如何适应你的第一个代码?你在(或打算)foo 提供什么价值?
  • 是的。在“foo”我想把 req.query["username"]
  • 在redis中那个key引用的值中

标签: node.js asynchronous callback


【解决方案1】:

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" );
      }
   });
});

【讨论】:

  • 酷,谢谢!进入这种异步状态仍然有点困难,来自 php.ini。无论如何,你应该看看 redis,它就像 node.js 的面包和黄油
  • 就个人而言,我认为当您连续有多个回调时,回调有点难以阅读。我真的很喜欢承诺。我通常使用github.com/kriszyp/node-promise。这里是 stackoverflow 人谈论他们的链接:stackoverflow.com/questions/4296505/…
猜你喜欢
  • 1970-01-01
  • 2015-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
  • 2013-08-31
相关资源
最近更新 更多