【问题标题】:Nodejs Cassandra Client [node-cassandra-client]Nodejs Cassandra 客户端 [node-cassandra-client]
【发布时间】:2012-02-22 23:10:42
【问题描述】:

我尝试使用 node-cassandra-client 通过 nodejs 连接到我的 cassandra 集群 [版本 1.0.6]

这是我的示例脚本

var Connection = require('cassandra-client').Connection;
var con = new Connection({host:'x.x.x.x', port:9160, keyspace:'Stats', timeout:10000});
console.log(con);
con.execute('UPDATE TestCF ?=? WHERE key=?', ['cola', '1', '20120132'], function(err) {
    if (err) {
        console.log("Failed");
    } else {
        console.log("success");
    }
});

在执行脚本时

    The "sys" module is now called "util". It should have a similar interface.
    node-cassandra-client.driver: connecting x.x.x.x:9160 {}
    { validators: {},
      client: null,
      connectionInfo: 
       { host: 'x.x.x.x',
         port: 9160,
         keyspace: 'Stats',
         timeout: 10000 },
      timeout: 10000 }

    node.js:201
            throw e; // process.nextTick error, or 'error' event on first tick
                  ^
    TypeError: Cannot call method 'execute_cql_query' of null
        at [object Object].execute (/home/tamil/workspace/TestProjects/node-cass/node_modules/cassandra-client/lib/driver.js:367:17)
        at Object.<anonymous> (/home/tamil/workspace/TestProjects/node-cass/index.js:5:5)
        at Module._compile (module.js:432:26)
        at Object..js (module.js:450:10)
        at Module.load (module.js:351:31)
        at Function._load (module.js:310:12)
        at Array.0 (module.js:470:10)
        at EventEmitter._tickCallback (node.js:192:40)

我的节点工具统计数据

Address         DC          Rack        Status State   Load            Owns    Token                                       
x.x.x.x         datacenter1 rack1       Up     Normal  1.03 MB         100.00% 0     

错误原因是什么?并且需要一些帮助来解决这个问题

【问题讨论】:

  • 仅供参考,在使用池连接工作时执行相同的查询

标签: node.js cassandra


【解决方案1】:

看起来 node.js 节俭驱动程序存在某种问题。 Helenus 让我更加幸运。

【讨论】:

    【解决方案2】:

    连接中的客户端为空。您需要先连接()。这是一个示例(忽略所有错误):

    var con = new Connection({host:'x.x.x.x', port:9160, keyspace:'Stats', timeout:10000});
    con.connect(function(err) {
      assert.ifError(err);
      con.execute('SELECT COUNT(*) FROM TestCF', [], function(err, rows) {
        con.close(function(err) {
          // you're done now.
        });
      });
    });
    

    我推荐使用async来处理连接、查询、关闭等的排序

    【讨论】:

    • 你如何处理异步连接、查询和关闭的顺序?
    • 任何保证工作流程有序的东西:想到 async.series 和 async.waterfall。
    • 谢谢,这就是我最终做的,而且效果很好。
    猜你喜欢
    • 2019-01-23
    • 2015-06-21
    • 2012-10-05
    • 2017-11-10
    • 2015-04-06
    • 1970-01-01
    • 2018-05-03
    • 2019-10-13
    • 2011-12-30
    相关资源
    最近更新 更多