Node.js操作MongoDB时如何读取集合内的全部数据?
问题修复方案
核心问题说明
collection('secrets')仅用于获取集合实例对象,不会触发数据查询,需要追加查询方法才能拿到集合内的真实文档- 原代码调用
db.feed时没有接收查询结果,无法将数据传递给模板渲染
修复后代码
Router.js
router.get('/feed', async (req,res) => { try{ await db.client.connect() // 接收feed函数返回的集合数据 const secretsData = await db.feed(db.client) // 将数据传递给模板渲染,模板内可直接使用secrets变量访问数据 res.render("feed", { secrets: secretsData }) }catch(err){ console.log(err) }finally{ db.client.close() } })
Db.js
async function feed(client){ // 调用find查询全部文档 + toArray转换为可读的数组格式 let result = await client.db('secret_db').collection('secrets').find({}).toArray() console.log(result) // 返回查询结果给路由层 return result }
额外优化建议
生产环境不建议每次请求都执行connect()和close()操作,反复开关数据库连接会大幅降低接口性能,建议在服务启动时完成一次数据库连接,全局复用连接实例即可。
内容的提问来源于stack exchange,提问作者Ilkin
相关产品推荐
相关产品推荐

