【发布时间】:2015-06-09 19:05:17
【问题描述】:
我第一次接触 MEAN 堆栈,我正在通过 Mongoose 处理数据库。我对 Mongoose 或 MongoDB 不是很熟悉,所以我不知道他们喜欢如何配置。我也不知道 Mongoose 是否重要,或者这纯粹是一个 MongoDB 问题。
上一次我直接编写数据访问逻辑(没有 ORM 或注入的存储库来为我处理连接管理)是在 .NET 中使用System.Data.SqlClient。我记得必须始终确保 SqlConnection 的打开时间不再超出必要,并且在完成后始终明确关闭它。
我已经阅读了很多关于编写 MEAN 应用程序的方法,但没有人提到这一点。从我看到的代码中,我得到的印象是 MongoDB/Mongoose 连接喜欢存在于应用程序级别,并且我应该只为整个应用程序调用一次mongoose.connect。
这是我的连接代码,在应用程序启动时调用一次:
mongoose = require "mongoose"
connection = mongoose.connection
mongoose.connect process.env.MONGO_URI
connection.on 'error', (err) ->
console.error 'DB connection error', err
.once 'open', ->
console.log 'DB open'
gracefulExit = ->
connection.close ->
console.log 'Mongoose default connection disconnected through app termination'
process.exit 0
process.on('SIGINT', gracefulExit)
.on('SIGTERM', gracefulExit)
module.exports = (name, dataStructure) ->
schema = new Schema dataStructure
return mongoose.model(name, schema)
JavaScript translation if you need it
这是唯一调用mongoose.connect 的地方,并且生成的连接对象在整个应用程序中被重用。我这样做是对的,还是应该在每个请求上创建、打开、关闭和销毁它?我还需要注意哪些其他可扩展性问题?
我意识到这听起来有点开放,但我希望获得有关 MongoDB 和 Mongoose 内部结构和配置的客观信息。当我在具有大量并发请求的生产环境中执行此操作时会出现问题吗?
【问题讨论】:
标签: node.js mongodb coffeescript mongoose database-connection