javascript - ¿Conectarse a Cloudant CouchDB con Node.js?
(4)
Estoy intentando conectarme a mi base de datos CouchDB en Cloudant usando Node.js.
Esto funcionó en la cáscara:
curl https://weng:[email protected]/my_app/_all_docs
Pero este código node.js no funcionó:
var couchdb = http.createClient(443, ''weng:[email protected]'', true);
var request = couchdb.request(''GET'', ''/my_app/_all_docs'', {
''Host'': ''weng.cloudant.com''
});
request.end();
request.on(''response'', function (response) {
response.on(''data'', function (data) {
util.print(data);
});
});
Me devolvió estos datos:
{"error":"unauthorized","reason":"_reader access is required for this request"}
¿Cómo hago para enumerar todas mis bases de datos con Node.js?
El cliente http incorporado de Node.js tiene un nivel bastante bajo, no es compatible con la autenticación básica de HTTP. El segundo argumento de http.createClient
es solo un nombre de host. No espera credenciales allí.
Tienes dos opciones:
1. Construye el encabezado de Autorización Básica HTTP tu mismo
var Base64 = require(''Base64'');
var couchdb = http.createClient(443, ''weng.cloudant.com'', true);
var request = couchdb.request(''GET'', ''/my_app/_all_docs'', {
''Host'': ''weng.cloudant.com'',
''Authorization'': ''Basic '' + Base64.encode(''weng:password'')
});
request.end();
request.on(''response'', function (response) {
response.on(''data'', function (data) {
util.print(data);
});
});
Necesitará una biblioteca Base64, como una para el nodo escrito en C , o una versión de pureza pura (por ejemplo, la que usa el Futon CouchDB ).
2. Utilice un cliente HTTP de Node.js de más alto nivel
Un cliente HTTP más funcional, como Restler , hará que sea mucho más fácil hacer la solicitud anterior, incluidas las credenciales:
var restler = require(''restler'');
restler.get(''https://weng.cloudant.com:443/my_app/_all_docs'', {
username: ''weng'',
password: ''password''
}).on(''complete'', function (data) {
util.print(data);
});
Esta respuesta se ve un poco anticuada. Aquí hay una respuesta actualizada que verifiqué utilizando la siguiente biblioteca de Cloudant Supported NPM Node Client que funciona. https://www.npmjs.com/package/cloudant#getting-started
Y para responder a su pregunta sobre cómo enumerar sus bases de datos, utilice el siguiente código.
//Specify your Cloudant Database Connection URL. For Bluemix format is: https://username:[email protected]
dbCredentials_url = "https://username:[email protected]"; // Set this to your own account
// Initialize the library with my account.
// Load the Cloudant library.
cloudant = require(''cloudant'')(dbCredentials_url);
// List the Cloudant databases
cloudant.db.list(function(err, allDbs) {
console.log(''All my databases: %s'', allDbs.join('', '')) });
Hay muchos módulos CouchDB para Node.js.
- node-couch - un conector CouchDB
- node-couchdb - Una implementación completa de la API
- node-couchdb-min : cliente ligero con bajo nivel de abstracción y agrupación de conexiones.
- cradle - un cliente de alto nivel, almacenamiento en caché, CouchDB