2013-05-12 2 views
1

Я ном с Node.JS. Я использую CouchDB и Cradle. В couchDB У меня есть база данных с именем «test», и внутри нее есть документ с именем «упражнение». Документ имеет 2 поля: «FullName» и «Age». код для того, чтобы сохранить данные следующим образом:Node.JS cradle and couchDB assist

var cradle = require('cradle'); 
var connection = new(cradle.Connection)('http://127.0.0.1', 5984, { 
    auth: { username: 'toto_finish', password: 'password' } 
}); 

var db = connection.database('test'); 
db.save('exercise', { 
    FullName: param_name, Age: param_age 
}, function (err, res) { 
    if (err) { 
     // Handle error 
     response += ' SAVE ERROR: Could not save record!!\n'; 
    } else { 
     // Handle success 
     response += ' SUCESSFUL SAVE: The record was saved in CouchDB!\n'; 
    } 
    http_res.end(response); 
}); 

этот код работает хорошо, и сохраняет данные в CouchDB. Моя проблема в том, когда я хочу прочитать данные. код, который я написал это:

var cradle = require('cradle'); 
    var connection = new(cradle.Connection)('http://127.0.0.1', 5984, { 
     auth: { username: 'toto_finish', password: 'password' } 
    }); 

    var db = connection.database('test'); 
    db.view('exercise/all', {descending: true}, function(err, res) 
    { 
      console.log(res); 
     res.forEach(function (row) { 
      response = 'FullName: ' + row.FullName + '\n Age: ' + row.Age + '\n'; 
     }); 
    }); 
    http_res.end(response); 

, когда я пытаюсь напечатать ответ, ответ пуст, и я не знаю, что я делаю неправильно. Я знаю, что он не входит в цикл forEach, но я не понимаю, почему.

выход консоли:

[ { id: 'exercise', 
    key: null, 
    value: 
    { _id: 'exercise', 
     _rev: '1-7042e6f49a3156d2099e8ccb3cc7d937', 
     FullName: 'Toto Finish', 
     Age: '30' } } ] 

Заранее спасибо за любой ответ или ответ.

+0

Я забыл упомянуть, что представление, которое я создал, следующее: function (doc) { emit (null, doc); } –

ответ

0

Попробуйте переместить вызов http_res.send() внутри обратного вызова, предоставленного db.view - анонимной функции (err, res) {}.

Я не уверен, однако, в отношении инструкции .forEach, вы получите только последнее значение из вашего запроса в переменной , вы должны также изучить это.

0

spotirca прав

Функция db.view является асинхронной так http_res.end (ответ) вызывается до того, как представление возвращает данные.

Вы можете доказать это, возвращая дату в обоих console.log и http_res.end

console.log(res, new Date()) 

и

http_res.end(response, new Date()); 

Ответ HTTP будет иметь более раннюю дату/время.

Смежные вопросы