Подключиться к Cloudant CouchDB с Node.js? - PullRequest
20 голосов
/ 01 ноября 2010

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

Это сработало на оболочке:

    curl https://weng:password@weng.cloudant.com/my_app/_all_docs

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

    var couchdb = http.createClient(443, 'weng:password@weng.cloudant.com', 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?

Ответы [ 4 ]

18 голосов
/ 03 ноября 2010

Встроенный http-клиент Node.js довольно низкого уровня, он не поддерживает базовую аутентификацию HTTP из коробки.Второй аргумент 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, такая как , для узла, написанного на C , или чисто JS (например, тот, который использует CouchDB Futon ).

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

Более многофункциональный 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);
});
7 голосов
/ 23 ноября 2010

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

  • node-couch - разъем CouchDB
  • node-couchdb - Полная реализация API
  • node-couchdb-min - Легковесный клиент с низким уровнем абстракции и пулами соединений.
  • cradle - высокоуровневый кеширующий клиент CouchDB
5 голосов
/ 18 апреля 2013

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

  • nano - минималистичный драйвер couchdb для node.js

к списку. Он написан Нуно Джобом, CCO nodejitsu , и активно поддерживается.

0 голосов
/ 04 января 2017

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

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

//Specify your Cloudant Database Connection URL. For Bluemix format is: https://username:password@xxxxxxxxx-bluemix.cloudant.com

dbCredentials_url = "https://username:password@xxxxxxxxx-bluemix.cloudant.com"; // 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(', ')) });
...