我是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
jdoe4
和jdoe
文档已存在于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 :(得分:0)
这似乎是一个库问题=> Github Issue Socket Hangout
Look here if you dont know which library fit more your needs.
答案 1 :(得分:0)
我很快意识到felix-couchdb与节点8不兼容(我知道你没有使用版本8,但有一天你会用),所以我切换到nano couchdb,这里是以下代码:
它将为用户提供密钥
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表示获取。