我有一个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
答案 0 :(得分:1)
经过一段时间尝试与此战斗后,我意识到嵌套连接是可能的,错误不是由此引起的。我发现我将结构错误的数据传递给.add()
方法。它所接受的并不像Number
或String
那样简单,而是Buffer
。所以我不得不转换我想要保存的每个数据:
new Buffer(data)
使用默认编码(我相信它是utf8
)。我希望这会拯救一些人从地狱。我的问题的主要问题是我收到的错误根本没有意义。