首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Node.JS底座和couchDB帮助

Node.JS底座和couchDB帮助
EN

Stack Overflow用户
提问于 2013-05-12 22:26:12
回答 2查看 1.4K关注 0票数 1

我是Node.JS的新手,我正在使用CouchDB和摇篮。在couchDB中,我有一个名为'test‘的数据库,里面有一个名为'exercise’的文档。文档有两个字段:"FullName“和"Age”。保存数据的代码如下:

代码语言:javascript
复制
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。我的问题是我什么时候想要读取数据。我写的代码是:

代码语言:javascript
复制
  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循环,但我不明白为什么。

控制台输出为:

代码语言:javascript
复制
[ { id: 'exercise',
    key: null,
    value:
     { _id: 'exercise',
       _rev: '1-7042e6f49a3156d2099e8ccb3cc7d937',
       FullName: 'Toto Finish',
       Age: '30' } } ]

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

EN

回答 2

Stack Overflow用户

发布于 2013-05-14 04:04:23

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

但是,我不确定.forEach语句,您只能在response变量中获得查询的最后一个值,您也应该研究一下这一点。

票数 0
EN

Stack Overflow用户

发布于 2013-08-15 20:28:07

spotirca是对的

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

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

代码语言:javascript
复制
console.log(res, new Date())

代码语言:javascript
复制
http_res.end(response, new Date());

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16508373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档