首页 > 解决方案 > 如何导出要在中间件中使用的 Node MongoDB 驱动程序连接?

问题描述

我在运行节点 14.15.1 和 express 4.17.1 和 mongoDB 3.6.9 的快速服务器中使用 MVC 架构。我正在为 mongoDB 使用本机节点驱动程序。我的应用程序结构是:''''

/src
 /controllers
   ordersControllers.js
 /dao  // "data access object"
   ordersDAO.js
 /routes
 index.js
 server.js

''''

索引.js

''''

import * as mongodb from 'mongodb'
const MongoClient = mongodb.default.MongoClient

const port = process.env.PORT || 8000
const uri =
'mongodb+srv://name:password.....rest of connection string'

const client = new MongoClient(uri, {
  useNewUrlParser: true,
  poolSize: 50,
  useUnifiedTopology: true,
})

async function connectToMongoDB() {
  try {
  await client.connect()
  const database = client.db('cookieBiz')
  const collection = database.collection('orders')

  await listDatabases(client)

  app.listen(port, () => {
    console.log(`listening on port ${port}`)
  })
 } catch (e) {
     console.error(`Index.js ~~~ Unable to get database.collection: ${e}`)
 } finally {
     await client.close()
 }
}


async function listDatabases(client) {
  try {
    const dbList = await client.db().admin().listDatabases()
    console.log('Databases:')
    dbList.databases.forEach((db) => {
    console.log(` - ${db.name}`)
  })
} catch (error) {
  console.error(error)
 }
}

connectToMongoDB().catch(console.error)

// export default connectToMongoDB (I've tried exporting this)

''''

到目前为止,我基本上是将这个连接代码复制到ordersDAO.js,以便连接到mongo,获取正确的数据库,然后获取集合。这给了我一个很好的信息,https://www.terlici.com/2015/04/03/mongodb-node-express.html但我对类似事情的尝试失败了。

订单控制器.js

''''

import OrdersDAO from '../dao/ordersDAO.js'

export default class OrdersController {
  static async apiGetOrders(req, res, next) {
    try {
      console.log('made it to the controller step 1')

      const response = await OrdersDAO.getOrders()
      res.json(response)
    } catch (e) {
        console.log(e, 'Bummer Dude')
      return { e }
    }
  }

''''

订单DAO.js

''''

 export default class OrdersDAO {
  ....
  static async getOrders() {
    try {

      // This does not work
      const collection = connectToMongoDB.collection('orders')

      // await client.connect()
      // const database = client.db('cookieBiz')
      // const collection = database.collection('orders')

  // how do I get into the collection here other than copying index.js code again?

      const cursor = collection.find({})
      const allValues = await cursor.toArray()
      return allValues
      console.log(`OrdersDAO ~~~ line 87`, allValues)
    } catch (e) {
        console.error(`OrdersDAO ~~~ Unable to get orders: ${e}`)
        return { e }
    }
  }
 }

除了再次复制 index.js 代码之外,我如何进入这里的集合?

标签: javascriptnode.jsmongodb

解决方案


推荐阅读