2010-11-01 3 views
19

Я пытаюсь подключиться к моей базе данных CouchDB на Cloudant, используя Node.js.Подключиться к Cloudant CouchDB с помощью Node.js?

Это работало на раковине:

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

Но этот node.js код не работает:

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

Он дал мне эти данные обратно:

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

Как делать, чтобы перечислять все мои базы данных с помощью Node.js?

ответ

18

Встроенный HTTP-клиент Node.js довольно низкий, он не поддерживает HTTP Basic auth из коробки. Второй аргумент http.createClient - это просто имя хоста. Он не ожидает учетных данных.

У вас есть два варианта:

1. Построить HTTP Basic Authorization заголовочные себя

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

Вам понадобится Base64 Lib, такие как one for node written in C или чисто JS один (например, the one that CouchDB Futon uses).

2. Использование более высокого уровня Node.js HTTP клиент

Более функциональный клиент HTTP, как Restler, сделает это намного проще сделать запрос выше, включая учетные данные:

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

Кроме того, если вы вызываете это программно, вы должны создать ключ API. И предоставить эти ключевые разрешения для базы данных. Базы данных -> Документы (Pull-Down) -> Разрешения. Добавьте свой ключ и дайте ему доступ «Читатель/Писатель/etc ...». https://my_company.cloudant.com/dashboard.html#/database/my-database/permissions –

7

Существует множество модулей CouchDB для Node.js.

  • node-couch - разъем CouchDB
  • node-couchdb - Полная реализация API
  • node-couchdb-min - облегченный клиент с низким уровнем абстракции и пулы соединений.
  • cradle - высокий уровень, кэширование, CouchDB клиент
+1

Обновление node-couchdb: больше не активен/не поддерживается. – panchicore

+1

+1 для колыбели, кажется, хорошо. – panchicore

+1

node-couchdb RE-update: теперь поддерживается и активно имеет значение, показывая 12 мая 2012 г. – pulkitsinghal

5

Просто хотел добавить

  • nano - минималистичный водитель CouchDB для Node.js

к списку. Он написан Nuno Job, CCO nodejitsu и активно поддерживается.

0

Этот ответ немного устарел. Ниже приведен обновленный ответ, который я проверил, используя следующую библиотеку клиентского узла с поддержкой Cloudant Supported NPM, которая работает. https://www.npmjs.com/package/cloudant#getting-started

И чтобы ответить на его вопрос о том, как перечислить его базы данных, используйте следующий код.

//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(', ')) }); 
Смежные вопросы