20

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 を使用してすべてのデータベースを一覧表示するにはどうすればよいですか?

4

4 に答える 4

18

組み込みのNode.jshttpクライアントはかなり低レベルであり、そのままではHTTP基本認証をサポートしていません。の2番目の引数http.createClientは、単なるホスト名です。そこにクレデンシャルは必要ありません。

2つのオプションがあります。

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);
    });
});

Cで記述されたノード用のBase64ライブラリ、または純粋なJSライブラリ(CouchDB Futonが使用するライブラリなど)が必要になります。

2.より高レベルのNode.jsHTTPクライアントを使用する

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);
});
于 2010-11-02T22:24:42.943 に答える
7

Node.js 用の CouchDB モジュールは多数あります。

  • node-couch - CouchDB コネクタ
  • node-couchdb - 完全な API 実装
  • node-couchdb-min - 低レベルの抽象化と接続プーリングを備えた軽量クライアント.
  • cradle - 高レベルのキャッシング CouchDB クライアント
于 2010-11-23T11:10:51.327 に答える
5

追加したかっただけ

  • nano - node.js 用の最小限のcouchdbドライバー

リストに。nodejitsuの CCO である Nuno Job によって書かれ、積極的にメンテナンスされています。

于 2013-04-18T15:01:17.983 に答える