CouchDb未处理的'错误'事件 - 节点js

时间:2012-07-30 21:36:06

标签: node.js couchdb

我是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');
    });

});

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

我很快意识到felix-couchdb与节点8不兼容(我知道你没有使用版本8,但有一天你会用),所以我切换到nano couchdb,这里是以下代码:

  1. 将检查是否已创建数据库
  2. 只有在给定的密钥是唯一的
  3. 时才会插入
  4. 它将为用户提供密钥

    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');
    });
    
    });
    
  5. 值得注意的是,虽然这将在“同一时间”获得它们,但它仍然向数据库发出3个请求,1检查它是否存在,1表示插入(或不插入),1表示获取。