使用我的数据库模块,我没有检索我的数据

时间:2017-03-06 15:00:42

标签: javascript node.js cloudant

很抱歉,如果标题不是很具描述性。

我正在使用Node并尝试使用export.module来获得干净的代码。

app.js

// ...
require('./router')(app);
module.exports = app;

router.js

cloudant = require("./helpers/cloudant")
// ...
module.exports = (app) => {
// ...
 app.post("/statsPage", function(req, res) {
 // ... 
  var a = cloudant.listUsers();
  console.log("from post ", a) // --> it shows ("undefined")
  if(a == false || a == undefined ) {
    res.render("error");
  } else {
    res.render("statsPage", {
      results: a
  });
}

cloudant.js

exports = module.exports = {}

exports.listUsers = function() {
 db.find({selector: {_id:{ "$gt": 0}}}, function(err, body) {
  if(err) {
   console.log(err);
   return false;
  } else {
   console.log(body.docs) // --> it shows results correctly
   return body.docs;
  }
 });
}

我和其他人一样“导出”方法,比如“插入”,所以我确信这个问题与我的数据库连接或导出“config”无关。

1 个答案:

答案 0 :(得分:0)

db.find方法是异步的,因此从数据库获取的数据仅在回调函数中可用。如果仔细查看您在cloudant.js中导出的​​函数,您将看到没有返回语句返回任何数据,仅在回调函数中,这对任何事情都没有帮助。< / p>

有很多方法可以解决这个问题(很多很多帖子都在SO上处理它)。

最简单的解决方案是将您自己的回调传递给listUsers函数:

exports.listUsers = function (callback) {
    db.find({ selector: { _id: { "$gt": 0 } } }, function (err, body) {
        if (err) {
            console.log(err);
            callback(err);
        } else {
            callback(body.docs);
        }
    });
}

<强> router.js

app.post("/statsPage", function(req, res) {
    cloudant.listUsers(function (a) {
        console.log("from post ", a);
    });
});