【发布时间】:2020-10-14 17:33:03
【问题描述】:
我正在用 nodejs + express + mongodb + ejs 构建一个应用程序。
对于这个问题:我有 2 个文件 (server.js + db.js) 我将所有与 mongo 相关的东西都放在了那个单独的文件 (db.js) 中,这样我就可以在那里进行所有数据库查询。 问题:结果返回一个查询对象,我不知道如何在迭代中使用它(列出生成的文档),我将其发送给 ejs。当我执行 console.log(result.length) 时显示“未定义”。
有什么想法吗?
/* server.js: */
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()是异步的。根据.find()'s API docs,您可以通过将回调传递给它来获得结果,或者将其用作带有异步/等待或.then()的Promise。 -
@himanshu : 不,同样的结果
-
module.exports.getPLayers = function(){ Player.find({}, function (err, docs) { console.log("docs:"+docs); return docs; // this确实列出了这些项目,但是.... }); } // 但在 server.js 中 ... app1.get("/adm", function (req, res) { let result= db.getPLayers(); // undefined }
-
@cbr 你能解释一下如何实现吗?
标签: javascript node.js mongodb