javascript - 如何导出要在中间件中使用的 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 代码之外,我如何进入这里的集合?
解决方案
推荐阅读
- javascript - 将滑块/滑动条设置为从第一张幻灯片自动播放
- c# - OR-Tools、CP-SAT 求解器 - 最大化然后最大化
- php - 从数据库请求数据并使用 if() 条件检查,但结果显示即使 if() 条件不满足
- react-native - 反应本机泛响应器设置边界,有时不工作
- bash - 无法在 LXC 容器内创建或触摸文件
- autodesk-forge - 我目前正在使用 Forge RCDB 和 MongoDB,但数据库中没有数据和成本 Breaddown,总是显示加载
- xpages - 使用 SSJS 在新窗口/选项卡中打开 URL
- c# - 我应该处理 X509Certificate2 吗?
- css - 如何使用 iconmoon.io 生成 Icon Font 类型的图标?
- linkedin - 通过 api.linkedin.com/v2/shares 检索共享的排序不正确