我正尝试使用find()
通过Express应用显示我的MongoDB集合,但是每当我运行我的应用时,我的Mongo集合都会返回一个空数组。
我在这里找到了答案,但是他们在数据库连接中使用了Mongoose。我可以通过Mongoose进行连接,但也想通过MongoDB学习。
我通过MongoDB罗盘应用程序创建了数据库,所以没有架构文件。下面是我的代码,包括数据库连接:
dbConfig.js 我没有使用async / await函数,因为它仍然让我难以理解/关注
const { MongoClient } = require('mongodb');
var _db;
module.exports = {
connectToServer: (callback) => {
MongoClient.connect('mongodb://localhost:27017/TestDB', { useUnifiedTopology: true }, (err, client) => {
_db = client.db('test');
console.log('db is connected');
return callback(err);
})
},
getDb: () => {
return _db;
}
}
index.js 这是我的应用文件
const express = require('express');
const app = express();
const mongodbConfig = require('./config');
const port = process.env.PORT || 4000;
mongodbConfig.connectToServer( (err) => {
const findRouter = require('./find');
app.use('/find', findRouter);
app.listen(port, () => console.log('App connected'));
})
findRoute.js ,这是我得到空数组的地方
const express = require('express');
const router = express.Router();
const mongodbConfig = require('./config');
const db = mongodbConfig.getDb();
router.get('/', (req, res, next) => {
db.collection('test').find({}).toArray((err, results) => {
if (err) console.log(err);
res.send('That worked');
console.log('Here are you results:', results);
})
})
module.exports = router;
我不太确定自己缺少什么,是否有更一致的方法将Mongo合并到Express应用程序中,从而不会返回空数组?如果可能,我想将我的数据库configure / utill文件分开。
答案 0 :(得分:0)
不确定是不是您的情况,但对我而言,很多时候回调函数是问题所在。我使用猫鼬,但是应该类似,在我的情况下,find总是会返回null,我如何使用异步和等待功能而不是回调函数来解决它:
var err, results = await TestModel.find();
其中TestModel是mongoose.Model('test',TestSchema);
您可以尝试一下