1

我是 Node.JS 的菜鸟。我正在使用 CouchDB 和 Cradle。在 couchDB 中,我有一个名为“test”的数据库,在其中我有一个名为“exercise”的文档。该文档有 2 个字段:“全名”和“年龄”。为了保存数据的代码如下:

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' } } ]

提前感谢您的任何回复或回答。

4

2 回答 2

0

尝试在提供给 db.view 的回调中移动 http_res.send() 调用 - 匿名函数 (err, res) { }。

但是我不确定 .forEach 语句,您只会从响应变量中的查询中获得最后一个值,您也应该调查一下。

于 2013-05-13T20:04:22.623 回答
0

斑点是对的

db.view 函数是异步的,因此在视图返回任何数据之前调用 http_res.end(response)。

您可以通过在 console.log 和 http_res.end 中返回日期来证明这一点

console.log(res, new Date())

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

http 响应将具有较早的日期/时间。

于 2013-08-15T12:28:06.520 回答