【问题标题】:Couchbase network error when using get & set in bucket.js在 bucket.js 中使用 get & set 时出现 Couchbase 网络错误
【发布时间】:2013-08-22 11:27:41
【问题描述】:

我有这个简单的 js 脚本:

var cb = require('couchbase');
var bucket;
var connectionSettings = {
                            'user':'test-bucket',
                            'password':'test',
                            'hosts':['localhost:8091'],
                            'bucket':'test-bucket'
                         };

cb.connect(connectionSettings, function(e, bucket) {

    if (e) {

        errorHandler('connect', e);

    } else {

        console.log('Connection established!');

        bucket.get('testObject', function(e, doc) {
            if(e) {
                errorHandler('get', e);
            } else {
                console.log(doc);
            }       
        });

    }

});

function errorHandler(from, e) {

    console.log('Function: ' + from);
    console.log(e.message);
    console.log(e.stack);

}

执行它后,正在建立连接,但是当我尝试在此测试用例中获取 id 为“a”的文档时,出现以下错误:

syd@HP-Notebook:~/Desktop$ node test.js
Connection established!
Function: get
Network error
Error: Network error
    at makeError (/home/syd/node_modules/couchbase/lib/bucket.js:578:18)
    at getParsedHandler (/home/syd/node_modules/couchbase/lib/bucket.js:625:17)
node: ../src/ioplugin.cc:496: virtual int Couchnode::IoOps::updateEvent(lcb_socket_t, void*, short int, void*, void (*)(lcb_socket_t, short int, void*)): Assertion `socket != __null' failed.
Aborted (core dumped)

此外,这里是在 bucket.js 中出现这些错误的代码 sn-ps。

578:

function makeError(conn, errorCode) {
    // Early-out for success
    if (errorCode == 0) {
        return null;
    }

    // Build a standard NodeJS Error object with the passed errorCode
    var errObj = new Error(conn.strError(errorCode)); // <- 578 error here
    errObj.code = errorCode;
    return errObj;
}

625:

function getParsedHandler(data, errorCode, key, cas, flags, value) {
    // if it looks like it might be JSON, try to parse it
    if (/[\{\[]/.test(value)) {
        try {
            value = JSON.parse(value);
        } catch (e) {
        // console.log("JSON.parse error", e, value)
        }
    }
    var error = makeError(data[1], errorCode); // <- 625 error here
    data[0](error, value, {
        id : key,
        cas: cas,
        flags : flags
    });
}

任何想法为什么会发生这种情况? 附言我从 PHP 挖掘数据没有问题。

【问题讨论】:

  • 你为什么要声明var bucket = null;?并检查沙发底座是否正在运行?请更新更多详细信息...
  • 第一:你确定你没有网络问题(即过滤的端口,防火墙的 ips)吗?第二:尝试从 couchbase config json 中删除所有未使用的参数(如用户和密码)或将 user var 设置为您的存储桶名称(即“默认”)。
  • @AmolMKulkarni 桶在连接时获取数据库句柄并不重要,它不会保持为空,我检查了它。
  • @m03geek 没有防火墙问题和过滤端口。我也按照你的建议做了。此外,这已经在各种带有和不带有身份验证的存储桶上进行了测试。
  • @Panagiotis George Raditsas 你可以试试旧版本(即 2.0.7)。在您的第二个问题中,我在chat room 中添加了一些下载链接。

标签: node.js couchbase


【解决方案1】:

失败的原因与question 相同。将 libcouchbase 降级到 2.0.7 应该可以解决问题。

UPD:在新的 couchbase nodejs 库版本 1.0.0-beta 中“已修复”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    • 2018-04-12
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    相关资源
    最近更新 更多