سؤال

أحاول الاتصال بقاعدة بيانات CouchDB الخاصة بي على Cloudant باستخدام Node.js.

هذا عمل على القشرة:

    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؟

هل كانت مفيدة؟

المحلول

عميل 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 lib مثل واحد للعقدة مكتوبة في ج, ، أو واحد نقي (على سبيل المثال الشخص الذي يستخدمه Couchdb Futon).

2. استخدم عميل Node.js HTTP عالي المستوى

عميل 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);
});

نصائح أخرى

هناك الكثير من وحدات CouchDB لـ Node.js.

أردت فقط أن تضيف

  • نانو - سائق CouchDB الحد الأدنى لـ Node.js

إلى القائمة. كتبها نونو جوب ، CCO من Nodejitsu, وصيانتها بنشاط.

هذه الإجابة تبدو مؤرخة بعض الشيء. فيما يلي إجابة محدثة قمت بالتحقق منها باستخدام مكتبة عميل NPM Node المدعومة من Cloudant والتي تعمل.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(', ')) });
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top