使用 Node.js 连接到 Cloudant CouchDB?

Connect to Cloudant CouchDB with Node.js?

提问人:ajsie 提问时间:11/1/2010 最后编辑:700 Softwareajsie 更新时间:1/4/2017 访问量:9138

问:

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

这在 shell 上有效:

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

JavaScript 节点:.js couchdb cloudant

评论


答:

18赞 Steadicat 11/3/2010 #1

内置的 Node.js HTTP 客户端非常低级,它不支持开箱即用的 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. 使用更高级的 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);
});

评论

0赞 Bernie Perez 9/9/2014
此外,如果以编程方式调用此函数,则应创建 API 密钥。并授予该密钥对数据库的权限。数据库 -> 文档(下拉)->权限。添加您的密钥并授予其“Reader/Writer/etc...”访问权限。my_company.cloudant.com/dashboard.html#/database/my-database/...
7赞 Baggz 11/23/2010 #2

Node.js有很多CouchDB模块。

评论

1赞 pulkitsinghal 6/9/2012
node-couchdb 重新更新:现在维护并处于活动状态,提交显示于 2012 年 5 月 12 日
0赞 xverges 4/25/2014
Cloudant 的常见问题 我应该为[insert_language_here]使用什么库? 还建议 Sag,这是专门针对 Cloudant 进行的测试
5赞 zemirco 4/18/2013 #3

只是想添加

  • nano - 用于 Node.js 的简约沙发数据库驱动程序

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

-1赞 Carlos Ferreira 1/4/2017 #4

这个答案看起来有点过时了。这是我使用以下 Cloudant 支持的 NPM 节点客户端库验证的更新答案。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(', ')) });