正确的方法来处理库依赖

我无法决定/确定传递依赖关系到我的Expresspath的标准/最佳方法是什么。 我遇到的问题是,我的一些图书馆有绑定与他们关联,即。 我的会话pipe理器连接到我的redis队列客户端。 我的日志有configuration设置映射他们相应等

所以这里是我的路线:

// Include routes and endpoints app.use(require('./routes/account')(queue, models, log)); app.use(require('./routes/message')(queue, models, log)); app.use(require('./routes/admin') (queue, models, log)); 

正如你可以看到我传递我的依赖作为参数。 我还没有开始写unit testing,但是我怀疑这会给我带来更多的痛苦。

另一件我想要做的就是将库附加到我的请求对象,如下所示:

 req.log = log; req.nconf = nconf; req.sessions = sessions; 

我不确定的是:a)最好的/标准的做法是什么,b)这些方法中的任何一种都会影响性能/内存的使用,c)这将如何影响我未来的unit testing。

任何关于这个的见解都会很棒!

谢谢。

我会设置他们在应用程序级别:

 app.set('queue', queue) 

然后将您的应用程序传递给路由function:

 app.use(require ('./routes/admin')(app)) 

然后检索:

 queue = app.get('queue') 

您也可以考虑根据需要在文件的顶部添加库。

所以在日志中的例子是这样的:

 var log = require('myLogger'); // or require('../path/to/logger') if it's your own module 

然后你可以继续使用该文件中的日志。

在模型的情况下,只需要包含您需要的一个就可以使其更加清晰。 例如:

 // messageHandler.js var Message = require('../models/message'); function sendMessage(params){ // do some logic on params Message.send(params); } 

这对于unit testing非常适用,因为您可以根据需要来进行必要的操作,也可以通过更改要求的文件来存储事物。

我希望这有帮助!