Mercurial > repos > ryotas > cypher_tools
diff neo4j_driver.js @ 0:aa7a5cc0f59b default tip
commit
| author | ryo_tas <yamanaka@genome.rcast.u-tokyo.ac.jp> |
|---|---|
| date | Tue, 30 Dec 2014 18:27:26 +0900 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/neo4j_driver.js Tue Dec 30 18:27:26 2014 +0900 @@ -0,0 +1,76 @@ +/*** + * Excerpted from "Seven Databases in Seven Weeks", + * published by The Pragmatic Bookshelf. + * Copyrights apply to this code. It may not be used to create training material, + * courses, books, articles, and the like. Contact us if you are in doubt. + * We make no guarantees that this code is fit for any purpose. + * Visit http://www.pragmaticprogrammer.com/titles/rwdata for more book information. +***/ +var http = require('http'); + +exports.createClient = function(options) { + + options = options || {}; + + var + running = 0, + backlog = [], + host = options.host || 'localhost', + port = options.port || 7474, + limit = options.limit || 10; + + function dequeue() { + if (backlog.length && running < limit) { + req.apply(null, backlog.shift()); + } + } + + function req(method, path, data, callback) { + running += 1; + return http + .request({ + host: host, + port: port, + path: '/db/data/' + (path.join ? path.join('/') : path), + headers: {'Content-Type':'application/json'}, + method: method + }, function(res){ + var buffer = ''; + res.on('data', function(chunk){ + buffer += chunk; + }); + res.on('end', function(){ + var output; + if (callback && buffer != '') { + try { + output = JSON.parse(buffer); + } catch (err) { + console.error(err); + } + callback(output, res); + } + running -= 1; + dequeue(); + }); + }) + .on('error', function(){ + running -= 1; + backlog.push([method, path, data, callback]); + dequeue(); + }) + .end(data ? JSON.stringify(data) : undefined); + }; + + return { + get: function(path, callback) { + backlog.push(['GET', path, null, callback]); + dequeue(); + }, + post: function(path, data, callback) { + backlog.push(['POST', path, data, callback]); + dequeue(); + } + }; + +} +
