node.js中的cassandra-cql操作

根據github提供的apI編寫,使用的是express框架吐舌頭

cql.js

var express = require('express');
var router = express.Router();
var cql = require('node-cassandra-cql');
var client = new cql.Client({hosts:['localhost:9042','localhost:9160'],keyspace: 'demo'});
/* GET users listing. */
router.get('/', function(req, res, next) {
        client.execute('SELECT * FROM test where id=?', [1],
    function(err, result){
      if (err){
        console.log('execute failed');
      }
      else {
        console.log('got user profile with users ');
        console.log(result.rows[0].name);
        res.render('cql',{result: result.rows[0],title: 'execute'});
      }
    }
  );
});


router.get('/executeAsPrepared', function(req, res, next) {
  var query = 'select id,name,address,age from demo.test where id=?';
  var params = [2];
  var consistency = cql.types.consistencies.quorum;
  client.executeAsPrepared(query, params, consistency, function(err,result) {
    if (err) console.log('Something when wrong and the row was not selected');
    else {
      console.log('select on the cluster name %s address %s',result.rows[0].name,result.rows[0].address);
      res.render('cql',{result: result.rows[0],title: 'executeAsPrepared'});
    }
  });
});

//版本驅動不支持
router.get('/executeBatch', function(req, res, next) {
  var userId = cql.types.uuid();
  var messageId = cql.types.uuid();
  var queries = [
    {
      query: 'INSERT INTO demo.test (id, name,address,age) values (?, ?)',
      params: [userId, 'Zoro','beijing',25]
    }
  ];
  var consistency = cql.types.consistencies.quorum;
  client.executeBatch(queries, consistency, function(err,result) {
    if (err) console.log('The rows were not inserted on the cluster');
    else {
      console.log('Data updated on cluster',result.rows[0].name);
      //res.render('cql',{result: result.rows[0]});
    }
  });
});

router.get('/eachRow', function(req, res, next) {
  client.eachRow('select id,name,address,age from demo.test where id=?', [2],
  function(n, result) {
    //the callback will be invoked per each result as soon as they are received
    console.log('name value', n, result.name);
    res.render('cql',{result: result,title: 'eachRow'});
var express = require('express');
var router = express.Router();
var cql = require('node-cassandra-cql');
var client = new cql.Client({hosts:['localhost:9042','localhost:9160'],keyspace: 'demo'});
/* GET users listing. */
router.get('/', function(req, res, next) {
        client.execute('SELECT * FROM test where id=?', [1],
    function(err, result){
      if (err){
        console.log('execute failed');
      }
      else {
        console.log('got user profile with users ');
        console.log(result.rows[0].name);
        res.render('cql',{result: result.rows[0],title: 'execute'});
      }
    }
  );
});


router.get('/executeAsPrepared', function(req, res, next) {
  var query = 'select id,name,address,age from demo.test where id=?';
  var params = [2];
  var consistency = cql.types.consistencies.quorum;
  client.executeAsPrepared(query, params, consistency, function(err,result) {
    if (err) console.log('Something when wrong and the row was not selected');
    else {
      console.log('select on the cluster name %s address %s',result.rows[0].name,result.rows[0].address);
      res.render('cql',{result: result.rows[0],title: 'executeAsPrepared'});
    }
  });
});

//版本驅動不支持
router.get('/executeBatch', function(req, res, next) {
  var userId = cql.types.uuid();
  var messageId = cql.types.uuid();
  var queries = [
    {
      query: 'INSERT INTO demo.test (id, name,address,age) values (?, ?)',
      params: [userId, 'Zoro','beijing',25]
    }
  ];
  var consistency = cql.types.consistencies.quorum;
  client.executeBatch(queries, consistency, function(err,result) {
    if (err) console.log('The rows were not inserted on the cluster');
    else {
      console.log('Data updated on cluster',result.rows[0].name);
      //res.render('cql',{result: result.rows[0]});
    }
  });
});

router.get('/eachRow', function(req, res, next) {
  client.eachRow('select id,name,address,age from demo.test where id=?', [2],
  function(n, result) {
    //the callback will be invoked per each result as soon as they are received
    console.log('name value', n, result.name);
    res.render('cql',{result: result,title: 'eachRow'});
  },
  function (err, resultLength) {
    if (err) console.log('Oh dear...');
    console.log('%d rows where returned', resultLength);
  }
);
});

router.get('/streamField', function(req, res, next) {
  client.streamField('select id,name from demo.test where id=?', [3],
  function(err, result, photoStream) {
    //the callback will be invoked per each result as soon as they are received.
    if (err) console.log('Shame...');
    else {
      //The stream is a Readable Stream2 object
      //stdout.pipe(photoStream);
      console.log(result);
      res.send(result);
    }
  });
});

// Streaming query rows
router.get('/streamRows', function(req, res, next) {
 client.streamRows('select id,name,address,age from demo.test where id=?', [4],
  function(err, result) {
    //the callback will be invoked per each row as soon as they are received
    if (err) console.log("Oh dear...That wrong");
    else {
      console.log('streamRows name value', result.name);
      res.render('cql',{result: result,title: 'streamRows'});
    }
  });
});

router.get('/stream', function(req, res, next) {
 client.stream('select id,name,address,age from demo.test where id=?', [5])
  .on('readable', function () {
    //readable is emitted as soon a row is received and parsed
    var result;
    while (result = this.read()) {
      console.log('name %s and age %s', result.name, result.age);
      res.render('cql',{result: result,title: 'stream'});
    }
  })
  .on('end', function () {
    //stream ended, there aren't any more rows
  })
  .on('error', function (err) {
      console.log(err);
  });
});

module.exports = router;
                          

cql.ejs:

<!DOCTYPE html>
<html>
<head>
    <title>cassandra-cql測試用例(┬_┬)</title>
    <link rel='stylesheet' href='/stylesheets/style.css'/>
    <link rel='stylesheet' href='/stylesheets/bootstrap.css'/>
    <link rel='stylesheet' href='/stylesheets/bootstrap-theme.css'/>
    <link rel="stylesheet" type="text/css" href="/stylesheets/themes/bootstrap/easyui.css">
    <link rel="stylesheet" type="text/css" href="/stylesheets/themes/icon.css">
</head>
<body>
<div class="container-fluid">
    <form class="form-inline">
        <div class="form-group">
            <label for="name">姓名</label>
            <input type="text" class="form-control" id="name" title="姓名" placeholder="請輸入姓名"/>
        </div>
        <div class="form-group">
            <label for="age">年齡</label>
            <input type="number" class="form-control" id="age" placeholder="請輸入年齡"/>
        </div>
        <div class="form-group">
            <label for="address">地址</label>
            <input type="text" class="form-control" id="address" placeholder="請輸入地址"/>
        </div>
        <button type="button" id="set" class="btn btn-primary">提交數據</button>
    </form>
</div>
<br>

<div class="container-fluid">
    <h1><%= title%></h1>
    <table class="table table-striped">
        <tr>
            <th>編號:</th>
            <th>姓名:</th>
            <th>地址:</th>
            <th>年齡:</th>
        </tr>
        <tr>
            <td><%= result.id%></td>
            <td><%= result.name %></td>
            <td><%= result.address %></td>
            <td><%= result.age %></td>
        </tr>
    </table>
</div>
</body>
</html>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章