我在运行节点 14.15.1 和 express 4.17.1 以及 mongoDB 3.6.9 的 express 服务器中使用 MVC 架构。我正在使用 mongoDB 的本机节点驱动程序。我的应用程序结构是: ''''
/src
/controllers
ordersControllers.js
/dao // "data access object"
ordersDAO.js
/routes
index.js
server.js
''''
Index.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 但我尝试类似的东西失败了。
ordersController.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 }
}
}
''''
ordersDAO.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 代码之外,我如何进入这里的集合?