2010-11-01 12 views
19

Sto provando a connettermi al mio database CouchDB su Cloudant usando Node.js.Connessione a Cloudant CouchDB con Node.js?

questo ha funzionato sul guscio:

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

Ma questo Node.JS codice non ha funzionato:

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); 
     }); 
    }); 

mi ha dato questi dati indietro:

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

Come faccio a elencare tutti i miei database con Node.js?

risposta

18

Il client http Node.js incorporato è di livello piuttosto basso, non supporta l'autenticazione di base di HTTP fuori dalla scatola. Il secondo argomento su http.createClient è solo un nome host. Non si aspetta credenziali in là.

si hanno due opzioni:

1. Costruire il HTTP di base Autorizzazione intestazione te

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); 
    }); 
}); 

Avrete bisogno di un Base64 lib come one for node written in C, o una pura-JS (ad esempio the one that CouchDB Futon uses).

2. Utilizzare un più alto livello di client HTTP Node.js

Un client HTTP più ricco di funzioni, come Restler, renderà molto più facile per fare la richiesta di cui sopra, ivi comprese le credenziali:

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

Inoltre, se si sta chiamando questo a livello di codice, è necessario creare una chiave API. E dare le autorizzazioni chiave al database. Database -> Documenti (Pull-Down) -> Autorizzazioni. Aggiungi la tua chiave e assegnagli l'accesso 'Reader/Writer/etc ...'. https://my_company.cloudant.com/dashboard.html#/database/my-database/permissions –

7

Ci sono molti moduli CouchDB per Node.js.

  • node-couch - un connettore CouchDB
  • node-couchdb - Un'implementazione API completa
  • node-couchdb-min - client leggera con basso livello di astrazione e pool di connessioni.
  • cradle - un alto livello, il caching, cliente CouchDB
+1

aggiornamento node-couchdb: non più attivo/progetto manutenibile. – panchicore

+1

+1 per culla, sembra essere buono. – panchicore

+1

node-couchdb RE-update: ora mantenuto e attivo ha eseguito il commit il 12 maggio 2012 – pulkitsinghal

5

Volevo solo aggiungere

  • nano - autista CouchDB minimalista per node.js

alla lista. È stato scritto da Nuno Job, CCO di nodejitsu e mantenuto attivamente.

0

Questa risposta sembra un po 'datata. Ecco una risposta aggiornata che ho verificato utilizzando la seguente libreria Cloud NPM Client supportata che funziona. https://www.npmjs.com/package/cloudant#getting-started

E per rispondere alla sua domanda su come elencare i suoi database utilizzare il seguente codice.

//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(', ')) });