一尘不染

使用Node.js连接到Cloudant CouchDB吗?

node.js

我正在尝试使用Node.js连接到Cloudant上的CouchDB数据库。

这在外壳上起作用:

    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列出我的所有数据库?


阅读 230

收藏
2020-07-07

共1个答案

一尘不染

内置的Node.js http客户端相当低级,它不支持现成的HTTP
Basic身份验证。第二个参数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客户端

更强大的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);
});
2020-07-07