Security News
npm Updates Search Experience with New Objective Sorting Options
npm has a revamped search experience with new, more transparent sorting options—Relevance, Downloads, Dependents, and Publish Date.
rethinkdbdash
Advanced tools
A Node.js driver for RethinkDB with promises and a connection pool.
Status: Beta
Example wih koa:
var app = require('koa')();
var r = require('rethinkdbdash')();
app.use(function *(){
var result = yield r.table("foo").get("bar").run();
this.body = JSON.stringify(result);
});
app.listen(3000);
Example with bluebird:
var Promise = require('blubird');
var r = require('rethinkdbdash')();
var run = Promise.coroutine(function* () {
var result
try{
result = yield r.table("foo").get("bar").run();
console.log(JSON.stringify(result, null, 2));
}
catch(e) {
console.log(e);
}
})
Note: You have to start node with the --harmony
flag.
v0.11.10-release
) from source.node-protobuf
-- some libraries are not properly linked.libprotobuf
binary and development files (required to build node-protobuf
in the next step).npm
.npm install rethinkdbdash
While rethinkdbdash has almost the same syntax as the official driver, there are still a few differences.
This section will reference all the differences. For all the other methods not mentionned, please read the official driver's documentation.
The differences are:
Import rethinkdbdash:
var r = require('rethinkdbdash')(options);
options
can be:
{pool: false}
{
min: <number>, // minimum number of connections in the pool, default 50
max: <number>, // maximum number of connections in the pool, default 1000
bufferSize: <number>, // minimum number of connections available in the pool, default 50
timeoutError: <number>, // wait time before reconnecting in case of an error (in ms), default 1000
timeoutGb: <number>, // how long the pool keep a connection that hasn't been used (in ms), default 60*60*1000
}
Rethinkdbdash will return a bluebird promise when a method with the official driver takes a callback.
Example with yield
- 1:
try{
var cursor = yield r.table("foo").run();
var result = yield cursor.toArray();
//process(result);
}
else {
console.log(e.message);
}
Example with yield
- 2:
try{
var cursor = yield r.table("foo").run();
var row;
while(cursor.hasNext()) {
row = yield cursor.next();
//process(row);
}
}
else {
console.log(e.message);
}
Example then
and error
:
r.table("foo).run().then(function(connection) {
//...
}).error(function(e) {
console.log(e.mssage)
})
Rethinkdbdash implements a connection pool and is created by default.
If you do not want to use a connection pool, iniitialize rethinkdbdash with {pool: false}
like that:
var r = require('rethinkdbdash)({pool: false});
You can provide options for the connection pool with the following syntax:
var r = require('rethinkdbdash')({
min: <number>, // minimum number of connections in the pool, default 50
max: <number>, // maximum number of connections in the pool, default 1000
bufferSize: <number>, // minimum number of connections available in the pool, default 50
timeoutError: <number>, // wait time before reconnecting in case of an error (in ms), default 1000
timeoutGb: <number>, // how long the pool keep a connection that hasn't been used (in ms), default 60*60*1000
});
try {
var cursor = yield r.table("foo").run();
var result = yield cursor.toArray(); // The connection used in the cursor will be released when all the data will be retrieved
}
catch(e) {
console.log(e.message);
}
Get the number of connections
r.getPool().getLength();
Get the number of available connections
r.getPool().getAvailableLength();
Drain the pool
r.getPool().drain();
Note: If a query returns a cursor, the connection will not be released as long as the cursor hasn't fetch everything or has been closed.
Rethinkdbdash will return a cursor as long as your result is a sequence.
var cursor = yield r.expr([1, 2, 3]).run()
console.log(JSON.stringify(cursor)) // will *not* print [1, 2, 3]
var result = yield cursor.toArray();
console.log(JSON.stringify(result)) // Will print [1, 2, 3]
Long backtraces are split on multiple lines.
In case the driver cannot parse the query, it will provide a better location of the error.
In case an error occured because the server cannot parse the protobuf message, the
official driver emits an error
on the connection.
Rethinkdbdash emits an error and rejects all queries running on this connection and
close the connection. This is the only way now to avoid having some part of your
program hang forever.
The maximum nesting depth is your documents is by default 100 (instead of 20). You can change this setting with
r.setNestingLevel(<number>)
The tree representation of the query is built step by step and stored which avoid
recomputing it if the query is re-run.
exprJSON
, internal method used by insert
, is more efficient in the worst case (O(n)
).
If you do not wish to use rethinkdbdash connection pool, you can implement yours. The connections created with rethinkdbdash will emit a "release" event when they receive an error, an atom, or the end (or full) sequence.
A connection can also emit a "timeout" event if the underlying connection times out.
Update test/config.js
if your RethinkDB instance doesn't run on the default parameters.
Run
mocha --harmony-generators
Tests are also being run on wercker:
============
It
)FAQs
A Node.js driver for RethinkDB with promises and a connection pool
The npm package rethinkdbdash receives a total of 8,309 weekly downloads. As such, rethinkdbdash popularity was classified as popular.
We found that rethinkdbdash demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
npm has a revamped search experience with new, more transparent sorting options—Relevance, Downloads, Dependents, and Publish Date.
Security News
A supply chain attack has been detected in versions 1.95.6 and 1.95.7 of the popular @solana/web3.js library.
Research
Security News
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.