通过overclocked / mc在nodejs中嵌入memcache连接

时间:2012-11-08 15:56:56

标签: javascript node.js memcached

我有一个memcached状态,我想保存一些东西。当节点连接到我的应用程序的拓扑时,我希望它将自己添加到这种连接节点的列表中。我试图通过嵌套查询来做到这一点:

mc_cli.connect(function() {
mc_cli.get( key, function(err, response) {
    if(err.type == 'NOT_FOUND'){
        //save myself
        mc_cli.connect(function() {
            mc_cli.add( GLOBAL_KEY, uid, { flags: 0, exptime: 0}, function(err, status) {
                if (!err) { 
                    console.log(status);
                }
                else {
                    console.log(err);
                }
            });
        });
    }
[...]

此代码属于else,但出现以下错误:

{ type: 'CONNECTION_ERROR',
  description: 'Lost connection to server.' }

基本上代码所做的是,由于没有人设置连接的ID数组,执行代码的第一个节点是负责这样做的人。我没有显示以下代码,它只是获取ID列表并添加自己的ID。错误发生在显示的代码段中。现在,在库中打印此错误的代码如下:

try {
    this.sock.write(command + crlf);
    if (value) {
      this.sock.write(value);
      this.sock.write(crlf);
    }
    this.queue.enqueue({ handler: handler, callback: callback });
}
catch (x) {
    callback({ type: 'CONNECTION_ERROR', description: 'Lost connection to server.' }, null);
}

哪个不太有用,因为我无法理解是什么导致它。我想知道我做的是不是错了。我正在使用一些我曾经习惯使用mongoDB的嵌套东西,但我不确定我是否可以对memcached执行相同的操作,尤其是这个库。有经验的人有没有想过如何解决这个问题?感谢。

编辑:我忘了将链接添加到我正在使用的库中:overclocked/mc

1 个答案:

答案 0 :(得分:1)

经过一段时间尝试与此战斗后,我意识到嵌套连接是可能的,错误不是由此引起的。我发现我将结构错误的数据传递给.add()方法。它所接受的并不像NumberString那样简单,而是Buffer。所以我不得不转换我想要保存的每个数据:

new Buffer(data)

使用默认编码(我相信它是utf8)。我希望这会拯救一些人从地狱。我的问题的主要问题是我收到的错误根本没有意义。