在nodejs应用程序中传递数据库连接

mic*_*ael 8 database node.js

我在我的节点应用程序中使用express 3,并且我将我的路由分成了单独的文件...

app.use('/', routes);
app.use('/users', users);
Run Code Online (Sandbox Code Playgroud)

问题是我需要在许多这些路由中建立数据库连接.我应该连接到每个路径文件中的数据库,还是可以连接到我的主应用程序文件,并以某种方式将连接传递给包含?


我使用快速生成器来创建一个骨架应用程序.在app.js中,路由包括这样......

app.use('/', routes);
app.use('/users', users);
Run Code Online (Sandbox Code Playgroud)

在这些文件中,有如下路线......

var express = require('express');
var router = express.Router();

router.get('/', function(req, res) {
    res.render('index');
});
Run Code Online (Sandbox Code Playgroud)

Ale*_*kka 19

我只是在应用程序中保持数据库连接:

app.set('db',new MyDAO(config)); < - 用于定义路线的位置.

然后,在路线内,get()post()我只是做

req.app.get('db').usercollection.find()

这样,您就可以将数据库连接池连接到gloabl应用程序上下文.

另一种常见方法是扩展req每个请求,但每次都执行:

app.use(function(req,res,next){
    req.db = db; //this db comes from app.js context where you define it
    next();
});
Run Code Online (Sandbox Code Playgroud)

  • 是的。Monk 是 Mongo 的通用数据访问对象 (DAO)。这里的“MyDAO”只是对后端的抽象,以可读和可维护的方式检索和存储对象。它通常具有“getUserById()”或“getTodaysBlogEntries()”或“addChatMessage()”或类似的业务逻辑特定方法。如果后端从MySQL换成Mongo,上层代码不用改,直接替换DAO即可。请参阅 https://en.wikipedia.org/wiki/Data_access_object (2认同)