0

我连接redis服务器的nod​​e.js代码是这样的

    var http = require("http"),
  querystring = require("querystring"),
  redis = require("redis"),
  db = redis.createClient(6379, "127.0.0.1"); 

db.set("Jaime", "Developer", function(){});

http.createServer(function(req, res) {
  var qs = querystring.parse(req.url.split("?")[1]),
    firstName = qs.firstName;

  db.get(firstName, function(err, lastName) {
    var userName = firstName + " " + lastName,
      html = "<!doctype html>" +
        "<html><head><title>Hello " + userName + "</title></head>" +
        "<body><h1>Hello, " + userName + "!</h1></body><h2>I am in this page</h2></html>";

    res.end(html);

  });
}).listen(8000);

我的 redis 服务器也在运行并给出这样的消息

[3648] 10 月 13 日 11:43:00 * 服务器现在准备好接受端口 6 379 上的连接 [3648] 10 月 13 日 11:43:01 - DB 0:4 个插槽 HT 中的 3 个密钥(0 易失性)。[3648] 10 月 13 日 11:43:01 - 0 个客户端已连接(0 个从站),672976 字节正在使用 [3648] 10 月 13 日 11:43:06 - DB 0:4 个插槽 HT 中的 3 个密钥(0 个易失性)。[3648] 10 月 13 日 11:43:06 - 0 个客户端已连接(0 个从站),正在使用 672976 个字节

当我用浏览器(http://localhost:8000)连接它时,服务器状态给出

[3648] 10 月 13 日 11:45:07 - 接受 127.0.0.1:1715 [3648] 10 月 13 日 11:45:10 - DB 0:4 个插槽 HT 中的 3 个密钥(0 易失性)。[3648] 10 月 13 日 11:45:11 - 1 个客户端已连接(0 个从站),正在使用 680892 字节

浏览器出来就是这个

你好,未定义的空值!我在这个页面

我对此完全陌生..我不知道如何进行这项工作,请帮助我。

4

1 回答 1

1

你有两个问题。

首先,db.set 是一个异步操作,但是您在回调中有一个匿名函数,其中没有任何内容,因此无法保证在您执行 get 时操作已经完成。

您需要将后面的代码嵌套在 db.set 回调中(可能会变得混乱),或者为节点使用流控制库,例如异步。

其次,您从查询参数中检索 firstName,然后不传递任何内容......因此第一个未定义,例如 http://localhost:8000/?firstName=Jaime(这实际上是导致错误的原因)。

您需要修复两者才能使其正常工作。我会阅读节点中的异步操作和异步库。

(编辑添加链接)。

于 2012-10-13T07:08:57.043 回答