使用Node.js连接到Cloudant CouchDB?

20
我正在尝试使用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列出所有数据库?

4个回答

18

内置的 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 编写的 Node.js 库(如 此类库),或者纯 JavaScript 的库(例如 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);
});

此外,如果您正在以编程方式调用此功能,则应创建API密钥。并将该密钥授予数据库权限。数据库->文档(下拉)->权限。添加您的密钥并授予“读者/写入者/等等...”访问权限。https://my_company.cloudant.com/dashboard.html#/database/my-database/permissions - Bernie Perez

7
有很多适用于Node.js的CouchDB模块。

1
node-couchdb更新:现已得到维护和活跃,最新提交显示为2012年5月12日。 - pulkitsinghal
Cloudant的常见问题解答(FAQ)页面建议使用哪个库来进行[插入语言名称]开发?同时也推荐使用Sag,该库已经过专门针对Cloudant的测试。 - xverges

5

我想补充一点:

  • nano - node.js 的最小化couchdb驱动程序

加到列表中。它由 nodejitsu 的 CCO Nuno Job 编写,并且得到了积极的维护。


-1

这个答案看起来有点过时了。这里是一个更新的答案,我使用以下Cloudant支持的NPM Node客户端库进行了验证,它可以正常工作。 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(', ')) });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接