Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Node.js在app.js中导出模块与在单个模块中包含app.js_Database_Node.js_Express - Fatal编程技术网

Database Node.js在app.js中导出模块与在单个模块中包含app.js

Database Node.js在app.js中导出模块与在单个模块中包含app.js,database,node.js,express,Database,Node.js,Express,因此,我正在将我的express应用程序分为几个模块,我有一个问题 当前我的app.js包含: var db = module.exports.db = require('./helpers/db')(app.set('database')) 和模型文件包含: var DB = require('../app').db; 在阅读之后,构建模块的一种方法似乎是导出应用程序,并从模块内部请求应用程序,然后直接请求该模块 这意味着在我的db.js中我需要require(“../app”),在我的模

因此,我正在将我的express应用程序分为几个模块,我有一个问题

当前我的app.js包含:

var db = module.exports.db = require('./helpers/db')(app.set('database'))
和模型文件包含:

var DB = require('../app').db;
在阅读之后,构建模块的一种方法似乎是导出应用程序,并从模块内部请求应用程序,然后直接请求该模块

这意味着在我的db.js中我需要require(“../app”),在我的模型中我需要db=require('db')

当前db.js返回mysql连接的新实例:

 module.exports = function(settings) {
return new MysqlDB(settings);
}

我认为将module.exports.db移出app.js并在每个模型中直接要求db.js会创建多个连接实例,这是错误的吗

我自己写这篇文章有点困惑,所以请告诉我在哪里可以改进这个问题欢迎任何和所有提示,我真的很想更好地了解这一切


谢谢

我倾向于将需求推入模块,而不是模块必须知道从何处获取db对象的实例。这减少了耦合,并且更容易为测试目的注入模拟db对象。

很棒的技巧,只是对它的工作原理有点困惑。目前我有app.js require routes,routes文件需要一组控制器,并将url映射到正确的方法。在控制器中,我包含模型文件,我不认为我会将db从控制器传递到模型文件,对吗?(这似乎也与你的建议背道而驰)只是不确定我会把逻辑放在哪里