ajs*_*sie 20 javascript couchdb node.js cloudant
我正在尝试使用Node.js连接到Cloudant上的CouchDB数据库.
这适用于shell:
curl https://weng:password@weng.cloudant.com/my_app/_all_docs
Run Code Online (Sandbox Code Playgroud)
但是这个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);
});
});
Run Code Online (Sandbox Code Playgroud)
它给了我这些数据:
{"error":"unauthorized","reason":"_reader access is required for this request"}
Run Code Online (Sandbox Code Playgroud)
如何使用Node.js列出我的所有数据库?
Ste*_*cat 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);
});
});
Run Code Online (Sandbox Code Playgroud)
您将需要一个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);
});
Run Code Online (Sandbox Code Playgroud)
Node.js有很多CouchDB模块.
| 归档时间: |
|
| 查看次数: |
8208 次 |
| 最近记录: |