Подключиться к Cloudant CouchDB с помощью Node.js?
Я пытаюсь подключиться к моей базе данных CouchDB на Cloudant, используя 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?
Ответы
Ответ 1
Встроенный Node.js http-клиент довольно низкий уровень, он не поддерживает HTTP Basic auth из коробки. Второй аргумент http.createClient
- это просто имя хоста. Он не ожидает учетных данных там.
У вас есть два варианта:
1. Постройте собственный заголовок основной авторизации HTTP
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, такая как одна для node, написанная на C, или чистая JS (например, тот, который использует CouchDB Futon).
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);
});
Ответ 2
Существует множество модулей CouchDB для Node.js.
Ответ 3
Просто хотел добавить
- nano - минималистичный драйвер couchdb для node.js
в список. Он написан Nuno Job, CCO nodejitsu и активно поддерживается.
Ответ 4
Этот ответ немного устарел. Ниже приведен обновленный ответ, который я проверил с использованием следующей клиентской библиотеки с поддержкой Cloudant Supported NPM Node.
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(', ')) });