0

私は Node と CouchDb に不慣れで、それを手に入れようとしています。コードを機能させるのに苦労しています。usersテーブルを作成し、新しいユーザーを挿入し、「同時に」別のユーザーを取得したいと思います。

起動時に次のエラーが表示されnode app.jsます。

antoine@ubuntu:~/projects/couchDb$ node app.js 
Database users exists.
{"error":"conflict","reason":"Document update conflict."}
Leaving saveDoc

events.js:48
        throw arguments[1]; // Unhandled 'error' event
                       ^
Error: socket hang up
    at createHangUpError (http.js:1107:15)
    at Socket.onend (http.js:1188:27)
    at TCP.onread (net.js:369:26)

そして、これが私のコードです。何か問題がありますか? (getDoc 関数を削除すると、エラーはなくなります) 私は、couchDB 1.0.1 とノード 0.6.12 を使用しています。

およびドキュメントはデータベースjdoe4jdoe既に存在しusersます。

var dbHost = "127.0.0.1";
var dbPort = 5984;
var dbName = 'users';

var couchdb = require('felix-couchdb');
var client = couchdb.createClient(dbPort, dbHost);

var user = {
  name: {
    first: 'John',
    last: 'Doe'
  }
}

var db = client.db(dbName);

db.exists(function(err, exists) {
  if (!exists) {
    db.create();
    console.log('Database ' + dbName + ' created.');
  } else {
    console.log('Database ' + dbName + ' exists.');
  }

  db.saveDoc('jdoe4', user, function(err, doc) {
    if( err) {
          console.log(JSON.stringify(err));
        } else {
          console.log('Saved user.');
        }
        console.log('Leaving saveDoc');
    });

    db.getDoc('jdoe', function(err,doc) {
        if( err) {
            console.log(JSON.stringify(err));
        } else {
            console.log(JSON.stringify(doc));
        }
        console.log('Leaving getDoc');
    });

});
4

2 に答える 2

0

felix-couchdbがノード8と互換性がないことにすぐに気付きました(バージョン8を使用していないことはわかっていますが、いつか使用する予定です)。そこで、nano couchdbに切り替えました。次のコードは、次のとおりです。

  1. dbが作成されているかどうかを確認します
  2. 指定されたキーが一意である場合にのみ挿入されます
  3. それはユーザーにキーを取得します

    var couchdb = require('nano')('http://localhost:5984')
      , dbName = 'users'
      , db = couchdb.use(dbName)
      ;
    
    var user = {
        name: {
            first: 'John',
            last: 'Doe'
        }
    }
    
    couchdb.db.create(dbName, function(err, db_body) {
    
    db.insert(user, 'jdoe4', function(err, doc, header) {
        if( err) {
          console.log('Cannot save user');
        } else {
          console.log('Saved user.');
        }
        console.log('Leaving saveDoc');
    });
    
    db.get('jdoe', function(err, doc) {
        if( err) {
            console.log('Cannot get user');
        } else {
            console.log(JSON.stringify(doc));
        }
        console.log('Leaving getDoc');
    });
    
    });
    

注目に値することの1つは、これにより「同時に」取得されますが、データベースに対して3つのリクエストが行われていることです。1つは存在するかどうかを確認し、1つは挿入する(またはしない)、1つは取得します。

于 2012-07-31T15:16:53.223 に答える
0

ライブラリの問題のようです => Github Issue Socket Hangout

どのライブラリが自分のニーズにより適しているかわからない場合は、こちらをご覧ください。

于 2012-07-31T14:43:57.180 に答える