2012-07-30 44 views
0

我是新手Node和CouchDb,我试图抓住它。 我很努力使一段代码工作。 我想创建一个表users,插入一个新用户并'在同一时间'获取另一个用户。CouchDb未处理的'错误'事件 - 节点js

启动node app.js当我得到这个错误:

[email protected]:~/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'); 
    }); 

}); 

回答

0

我很快意识到,费利克斯 - CouchDB的不与节点8(我知道你不使用版本8兼容,但你总有一天会),所以我切换到纳米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'); 
    }); 
    
    }); 
    

有一件事值得一提的是,虽然这将让他们在“相同时间“,它仍然向数据库发出3个请求,1来检查它是否存在,1要插入(或不),1要得到。