很抱歉,如果标题不是很具描述性。
我正在使用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”无关。
答案 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);
});
});