Product
Introducing License Enforcement in Socket
Ensure open-source compliance with Socket’s License Enforcement Beta. Set up your License Policy and secure your software!
minimalistic couchdb driver for node.js
nano
features:
nano
npm install nano
to use nano
you need to connect it to your couchdb install, to do that:
var nano = require('nano')('http://localhost:5984');
to create a new database:
nano.db.create('alice');
and to use it:
var alice = nano.db.use('alice');
in this examples we didn't specify a callback
function, the absence of a
callback means "do this, ignore what happens".
in nano
the callback function receives always three arguments:
err
- the error, if anybody
- the http response body from couchdb, if no error.
json parsed body, binary for non json responsesheader
- the http response header from couchdb, if no errora simple but complete example using callbacks is:
var nano = require('nano')('http://localhost:5984');
// clean up the database we created previously
nano.db.destroy('alice', function() {
// create a new database
nano.db.create('alice', function() {
// specify the database we are going to use
var alice = nano.use('alice');
// and insert a document in it
alice.insert({ crazy: true }, 'rabbit', function(err, body, header) {
if (err) {
console.log('[alice.insert] ', err.message);
return;
}
console.log('you have inserted the rabbit.')
console.log(body);
});
});
});
if you run this example(after starting couchdb) you will see:
you have inserted the rabbit.
{ ok: true,
id: 'rabbit',
rev: '1-6e4cb465d49c0368ac3946506d26335d' }
you can also see your document in futon.
creates a couchdb database with the given name
.
nano.db.create('alice', function(err, body) {
if (!err) {
console.log('database alice created!');
}
});
get informations about name
.
nano.db.get('alice', function(err, body) {
if (!err) {
console.log(body);
}
});
destroys name
.
nano.db.destroy('alice');
even though this examples looks sync it is an async function.
lists all the databases in couchdb
nano.db.list(function(err, body) {
// body is an array
body.forEach(function(db) {
console.log(db);
});
});
compacts name
, if designname
is specified also compacts its
views.
replicates source
on target
with options opts
. target
has to exist, add create_target:true
to opts
to create it prior to
replication.
nano.db.replicate('alice', 'http://admin:password@otherhost.com:5984/alice',
{ create_target:true }, function(err, body) {
if (!err)
console.log(body);
});
asks for the changes feed of name
, params
contains additions
to the querystring.
nano.db.changes('alice', function(err, body) {
if (!err)
console.log(body);
});
creates a scope where you operate inside name
.
var alice = nano.use('alice');
alice.insert({ crazy: true }, 'rabbit', function(err, body) {
// do something
});
alias for nano.use
alias for nano.use
alias for nano.use
makes a request to couchdb, the available opts
are:
opts.db
- the database nameopts.method
- the http method, defaults to get
opts.path
- the full path of the request, overrides opts.doc
and
opts.att
opts.doc
- the document nameopts.att
- the attachment nameopts.content_type
- the content type of the request, default to json
opts.body
- the document or attachment bodyopts.encoding
- the encoding for attachmentsalias for nano.request
alias for nano.request
/ _) roar! i'm a vegan!
.-^^^-/ /
__/ /
/__.|_|-|_|
an object containing the nano configurations, possible keys are:
url
- the couchdb urldb
- the database nameinserts doc
in the database with an optional docname
.
var alice = nano.use('alice');
alice.insert({ crazy: true }, 'rabbit', function(err, body) {
if (!err)
console.log(body);
});
removes revision rev
of docname
from couchdb.
alice.destroy('alice', '3-66c01cdf99e84c83a9b3fe65b88db8c0', function(err, body) {
if (!err)
console.log(body);
});
gets docname
from the database with optional querystring
additions params
.
alice.get('rabbit', { revs_info: true }, function(err, body) {
if (!err)
console.log(body);
});
bulk operations(update/delete/insert) on the database, refer to the couchdb doc.
list all the docs in the database with optional querystring additions params
.
alice.list(function(err, body) {
if (!err) {
body.rows.forEach(function(doc) {
console.log(doc);
});
}
});
bulk fetch of the database documents, docnames
are specified as per
couchdb doc.
additionals querystring params
can be specified, include_doc
is always set
to true
.
inserts an attachment attname
to docname
, in most cases
params.rev
is required. refer to the
doc for more details.
var fs = require('fs');
fs.readFile('rabbit.png', function(err, data) {
if (!err) {
alice.attachment.insert('rabbit', 'rabbit.png', data, 'image/png',
{ rev: '12-150985a725ec88be471921a54ce91452' }, function(err, body) {
if (!err)
console.log(body);
});
}
});
or using pipe
:
var fs = require('fs');
fs.createReadStream('rabbit.png').pipe(
alice.attachment.insert('new', 'rab.png', {}, 'image/png')
);
get docname
's attachment attname
with optional querystring additions
params
.
var fs = require('fs');
alice.attachment.get('rabbit', 'rabbit.png', function(err, body) {
if (!err) {
fs.writeFile('rabbit.png', body);
}
});
or using pipe
:
var fs = require('fs');
alice.attachment.get('rabbit', 'rabbit.png').pipe(fs.createWriteStream('rabbit.png'));
destroy attachment attname
of docname
's revision rev
.
alice.attachment.destroy('rabbit', 'rabbit.png',
'1-4701d73a08ce5c2f2983bf7c9ffd3320', function(err, body) {
if (!err)
console.log(body);
});
calls a view of the specified design with optional querystring additions
params
.
alice.view('characters', 'crazy_ones', function(err, body) {
if (!err) {
body.rows.forEach(function(doc) {
console.log(doc.value);
});
}
});
calls the design's update function with the specified doc in input.
nano is minimalistic but you can add your own features with
nano.request(opts, callback)
for example, to create a function to retrieve a specific revision of the
rabbit
document:
function getrabbitrev(rev, callback) {
nano.request({ db: 'alice',
doc: 'rabbit',
method: 'get',
params: { rev: rev }
}, callback);
}
getrabbitrev('4-2e6cdc4c7e26b745c2881a24e0eeece2', function(err, body) {
if (!err) {
console.log(body);
}
});
you can pipe in nano like in any other stream.
for example if our rabbit
document has an attachment with name picture.png
(with a picture of our white rabbit, of course!) you can pipe it to a writable stream
var fs = require('fs'),
nano = require('nano')('http://127.0.0.1:5984/');
var alice = nano.use('alice');
alice.attachment.get('rabbit', 'picture.png').pipe(fs.createWriteStream('/tmp/rabbit.png'));
then open /tmp/rabbit.png
and you will see the rabbit picture.
check issues
to run (and configure) the test suite simply:
cd nano
vi cfg/tests.js
npm install # should install ensure and async, if it doesn't install manually
npm test
after adding a new test you can run it individually (with verbose output) using:
nano_env=testing node tests/doc/list.js list_doc_params
where list_doc_params
is the test name.
everyone is welcome to contribute with patches, bugfixes and new features
nano
in githubgit checkout -b my_branch
git push origin my_branch
_
/ _) roar! i'm a vegan!
.-^^^-/ /
__/ /
/__.|_|-|_| cannes est superb
git clone git://github.com/dscape/nano.git
(oo)--',-
in caos
copyright 2011 nuno job <nunojob.com> (oo)--',--
licensed under the apache license, version 2.0 (the "license"); you may not use this file except in compliance with the license. you may obtain a copy of the license at
http://www.apache.org/licenses/license-2.0
unless required by applicable law or agreed to in writing, software distributed under the license is distributed on an "as is" basis, without warranties or conditions of any kind, either express or implied. see the license for the specific language governing permissions and limitations under the license.
FAQs
The official CouchDB client for Node.js
The npm package nano receives a total of 27,477 weekly downloads. As such, nano popularity was classified as popular.
We found that nano demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 7 open source maintainers 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.
Product
Ensure open-source compliance with Socket’s License Enforcement Beta. Set up your License Policy and secure your software!
Product
We're launching a new set of license analysis and compliance features for analyzing, managing, and complying with licenses across a range of supported languages and ecosystems.
Product
We're excited to introduce Socket Optimize, a powerful CLI command to secure open source dependencies with tested, optimized package overrides.