正确的方法来处理库依赖
我无法决定/确定传递依赖关系到我的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非常适用,因为您可以根据需要来进行必要的操作,也可以通过更改要求的文件来存储事物。
我希望这有帮助!