我使用ExpressJs和Node.js,并把我所有的路由放到'路由'文件夹中。ExpressJS并在单独的路由文件之间传递变量
在服务器上,我做我的DB连接,然后确定我的路线,像这样:
var routes = require('./routes');
var db;
dbconnect = new mongo.Db(config.mongo_database, new mongo.Server(config.mongo_host, config.mongo_port, {}), {});
dbconnect.open(function (err, db) {
db.authenticate(config.mongo_user, config.mongo_pass, function (err, success) {
if (success) {
//routes/index.js
app.get('/', routes.index);
//routes/users.js
app.get('/users', routes.users);
}
});
});
我想访问内每个路线JavaScript文件的“DB”的对象。我如何将这个'app.js'文件传递给index.js或users.js?
谢谢!
缺点是现在每次你想在控制器中重复使用一个“模块”时,你必须将它添加到签名中,最后可能会出现一些控制器需要2个,一个需要3个,另一个需要5个的情况,现在你已经有了一个必须容纳最大共同点的签名。我认为更好的方法是将你的数据库行为封装在它自己的松耦合模块中。 – 2012-04-02 20:43:19
@BradHarris:这绝对是一个缺点。如果您觉得这一点很重要,那么保留相同签名的一种方法是接受带有参数的对象:'{db:db,foo:foo,bar:bar}'。你的解决方案绝对不是一个很好的解决方法,尽管它有自己的缺点 - 比如单元测试更难。 – 2012-04-25 16:30:10