如何将Node.js与Cassandra连接?

时间:2016-06-02 12:07:18

标签: node.js cassandra

我已经尝试将Node.js与Cassandra连接在localhost上50年了(感觉就好),但还没有弄清楚它们是如何协同工作的。我将不胜感激任何可能导致解决方案的建议。

项目目录:

project  - app - some files
        \- build - index.js, index.html, etc.(I start the server by "node index.js")
        \- node_modules - some modules
        \- signup - some files to be minified
        \- signin - some files to be minified
        \- apache-cassandra-3.0.6 - bin, conf, etc.(downloaded from tarball)
        \- package.json
        \- webpack.config.js

Webpack工作没有任何问题,因此webpack配置中不存在这个问题 我可以使用cqlsh插入数​​据,因此问题不在于数据结构模型。

我认为问题在于我对如何一起使用Node.js和Cassandra缺乏了解。

我将Node.js与Cassandra连接的过程:

  1. 转到构建目录
  2. node index.js
  3. 打开localhost:3000,找到由express.js路由的主页,显示没问题。
  4. 转到注册页面并提交表单
  5. 错误(未插入数据)
  6. 我不确定哪个联系点是正确的,' 127.0.0.1:9042'或' 127.0.0.1'

    var client = new cassandra.Client({contactPoints:['127.0.0.1:9042']});
                       OR
    var client = new cassandra.Client({contactPoints:['127.0.0.1']});
    

    我像这样设置我的路由器。

    var router = express.Router();
    var insertUser = 'INSERT INTO keyspace.users (username, create_time, email, password) VALUES (?, ?, ?, ?);';
    
    router.get"/", function(req, res) {
      res.sendFile(__dirname + '/index.html'); // This is working.
    });
    
    router.post("/signup", function(req, res) {
      var username = req.body.username;
      var email = req.body.email;
      var password = req.body.password;
      client.execute(insertUser, [username, now(), email, password], 
      { prepare: true }, function(err) {
        if (err) {
          console.log("error"); // I receive error.
        } else {
          console.log("success");
        }
      });
    });
    

    我应该像这样在后台运行cassandra吗?

    cd apache-cassandra-3.0.6 - > cd bin - > ./cassandra

    我在这里缺少什么?

1 个答案:

答案 0 :(得分:4)

根据您提供的错误消息,您似乎在Cassandra实例上设置了PasswordAuthenticator身份验证或其他身份验证器。检查cassandra.yaml文件中的“authenticator”属性,是否设置为PasswordAuthenticatorAllowAllAuthenticator或其他内容?

如果使用PasswordAuthenticator,您可以将PlainTextAuthenticator实例作为authProvider传递给客户选项来指定凭据:

var PlainTextAuthProvider = cassandra.auth.PlainTextAuthProvider;
var client = new cassandra.Client({ contactPoints:['127.0.0.1:9042'], 
                                    authProvider: new PlainTextAuthProvider('cassandra', 'cassandra')};

使用身份验证时可用的默认用户是“cassandra”,密码为“cassandra”,但您可以按照Configuring Authentication进行更改。

相关问题