簡體   English   中英

使用Node.js連接Cloudant CouchDB?

[英]Connect to Cloudant CouchDB with Node.js?

我正在嘗試使用Node.js連接到Cloudant上的CouchDB數據庫。

這適用於shell:

    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列出我的所有數據庫?

內置的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庫,例如一個用C語言編寫的節點 ,或一個純JS庫(例如CouchDB Futon使用的那個 )。

2.使用更高級別的Node.js HTTP客戶端

Restler這樣功能更強大的HTTP客戶端可以更輕松地完成上述請求,包括憑據:

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

Node.js有很多CouchDB模塊。

只是想補充一下

  • 用於node.js的nano - minimalistic couchdb驅動程序

到列表。 它由nodejitsu的 CCO的Nuno Job編寫並積極維護。

這個答案看起來有點過時了。 以下是我使用以下Cloudant支持的NPM節點客戶端庫驗證的更新答案。 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(', ')) });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM