2010-11-01 16 views
19

Estoy tratando de conectarme a mi base de datos CouchDB en Cloudant usando Node.js.¿Conectarse a Cloudant CouchDB con Node.js?

Esto funcionó en la cáscara:

curl https://weng:[email protected]/my_app/_all_docs 

Pero esto Node.JS código 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 dio estos datos de nuevo:

{"error":"unauthorized","reason":"_reader access is required for this request"} 

Cómo Cómo puedo hacer una lista de todas mis bases de datos con Node.js?

Respuesta

18

El cliente http Node.js incorporado es de muy bajo nivel, no es compatible con la autenticación básica HTTP desde el primer momento. El segundo argumento para http.createClient es solo un nombre de host. No espera credenciales allí.

tiene dos opciones:

1. Construir la autorización básica HTTP Header 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); 
    }); 
}); 

Usted necesitará una base 64 lib como one for node written in C, o un puro-JS (por ejemplo the one that CouchDB Futon uses)

2. Utilice un más alto nivel de cliente HTTP Node.js

Un cliente HTTP más featureful, como Restler, hará que sea mucho más fácil de hacer esa solicitud, 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); 
}); 
+0

Además, si está llamando a esto programáticamente, debe crear una clave de API. Y conceda esos permisos clave a la base de datos. Bases de datos -> Docs (Pull-Down) -> Permisos. Agrega tu llave y dale acceso 'Lector/Escritor/etc ...'. https://my_company.cloudant.com/dashboard.html#/database/my-database/permissions –

7

Hay muchos módulos CouchDB para Node.js.

  • node-couch - un conector CouchDB
  • node-couchdb - Una implementación de la API completa
  • node-couchdb-min - cliente ligero con bajo nivel de abstracción y la agrupación de conexiones.
  • cradle - un nivel alto, el almacenamiento en caché, el cliente CouchDB
+1

actualización de node-couchdb: proyecto ya no activo/mantenible. – panchicore

+1

+1 por cuna, parece ser bueno. – panchicore

+1

node-couchdb RE-update: ahora mantenido y activo tiene confirmaciones que se muestran el 12 de mayo de 2012 – pulkitsinghal

5

sólo quería añadir

  • nano - controlador couchdb minimalista para Node.js

a la lista. Está escrito por Nuno Job, CCO de nodejitsu, y mantenido activamente.

0

Esta respuesta se ve un poco anticuada. Aquí hay una respuesta actualizada que verifiqué utilizando la siguiente biblioteca cliente de NPM compatible con Cloudant que funciona. https://www.npmjs.com/package/cloudant#getting-started

Y para responder a su pregunta sobre cómo listar 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(', ')) }); 
Cuestiones relacionadas