提问人:ajsie 提问时间:11/1/2010 最后编辑:700 Softwareajsie 更新时间:1/4/2017 访问量:9138
使用 Node.js 连接到 Cloudant CouchDB?
Connect to Cloudant CouchDB with Node.js?
问:
我正在尝试使用 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 列出我的所有数据库?
答:
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模块。
- node-couch - 一个 CouchDB 连接器
- node-couchdb - 完整的 API 实现
- node-couchdb-min - 具有低抽象级别和连接池的轻量级客户端.
- cradle - 一个高级缓存的 CouchDB 客户端
评论
1赞
pulkitsinghal
6/9/2012
node-couchdb 重新更新:现在维护并处于活动状态,提交显示于 2012 年 5 月 12 日
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(', ')) });
评论