Javascript 使用mongo nodejs require(';file.js';)module.exports时如何处理结果
我正在nodejs+express+mongodb+ejs中构建一个应用程序 对于这个问题:我有两个文件(server.js+db.js),所有与mongo相关的东西都放在这个单独的文件(db.js)中,这样我就可以在那里执行所有数据库查询。 问题是:result返回一个查询对象,我不知道如何在我发送给ejs的迭代中使用它(列出结果文档)。当我执行console.log(result.length)时,显示为“未定义” 有什么想法吗 /*server.js:*/Javascript 使用mongo nodejs require(';file.js';)module.exports时如何处理结果,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我正在nodejs+express+mongodb+ejs中构建一个应用程序 对于这个问题:我有两个文件(server.js+db.js),所有与mongo相关的东西都放在这个单独的文件(db.js)中,这样我就可以在那里执行所有数据库查询。 问题是:result返回一个查询对象,我不知道如何在我发送给ejs的迭代中使用它(列出结果文档)。当我执行console.log(result.length)时,显示为“未定义” 有什么想法吗 /*server.js:*/ let db = require
let db = require("./db.js");
app1.get("/page", function (req, res) {
let result= db.getPLayers(); // console.log(result); ==> query object, see below => Q
let qty = result.length; // console.log(qty); ==> undefined
res.render('adm', { playersFound: result}); // sent to render result via ejs
}
/*db.js*/
module.exports.getPLayers = function() {
return Player.find({});
}
//=>Q这是我作为结果得到的查询对象:
> Query { _mongooseOptions: {}, _transforms: [], _hooks: Kareem {
> _pres: Map {}, _posts: Map {} }, _executionCount: 0, mongooseCollection:
NativeCollection {
> collection: Collection { s: [Object] },
> Promise: [Function: Promise],
> _closed: false,
> opts: { .... and lots more
>
@HimanshuBhardwaj这在这里无关紧要。问题是
.find()
是异步的。根据,您可以通过向其传递回调,或将其作为async/await或的承诺来获得结果。然后()
@himanshu:no,same resultmodule.exports.getPLayers=function(){Player.find({},function(err,docs){console.log(“docs:+docs”);return docs;//这确实列出了项目,但是……});}//但是在server.js中。。。app1.get(“/adm”,function(req,res){let result=db.getPLayers();//undefined}@cbr您能解释一下如何实现它吗?您使用什么库来处理MongoDB?您使用(官方驱动程序)还是(更高级别的API)?我用一系列的。然后(因为我需要组合几个查询)还有比这更优雅的解决方案吗?
// server.js
app1.get("/adm", function (req, res) {
let db = require("./db.js");
let playersList;
let teamsList;
db.getPLayers().then(function () {
playersList = this.docs;
})
.then(function () {
db.getTeams().then(function () {
teamsList = this.docs;
})
.then(function () {
res.render('adm', { playersFound:
playersList, teamsFound: teamsList });//, teamsFound: dbteamsFound });
});
});
});
// db.js
exports.getPLayers = function(){
return Player.find({}, function (err, docs) {
this.docs=docs; console.log("==> db exporting getPlayers :"+
this.docs.length);
});
}
exports.getTeams = function(){
return Team.find({}, function (err, docs) {
this.docs=docs; console.log("==> db exporting getTeams :"+
this.docs.length);
});
}