避免在Node.js单身?

我已经多次读过,应该尽可能地避免单身。 通过单身我的意思是这种types的代码

exports = module.exports = new Passport(); 

这段代码来自Node.js模块PassportJS。 它允许我们使用护照,并添加一些将在我们的整个代码中共享的var。

所以,你可以看到我们可以做这个代码: https : //github.com/ragulka/sails-starter-app/blob/master/api/controllers/SessionController.js (这只是一个例子,我也是,我也是怪没人)。 请注意,他正在使用require的文件顶部的护照,然后使用之前在代码中添加的策略之一。 显然这很方便,但这是做到这一点的最好方法吗?

有没有办法从先前的代码中的控制器内传递护照variables?

让我知道如果有什么不清楚。

提前致谢。

有这样的情况,护照实例,快速应用程序实例,mongodb连接池,logging器实例等,其中最常见的情况是每个节点进程的单个实例。 在这些情况下,单例可以很方便,并保持代码简洁,只要模块还提供了一个简单的方法来访问和调用构造函数的less数时间,你想多个实例(如果你的应用程序想要2个不同的连接池到2个不同的mongodb数据库,或者2个不同的日志stream)。

虽然这样做有时可能不便于testing,嘲笑,剔除等。

有没有办法从以前的代码传递护照内的控制器var?

就在这里。 当你做var passport = require("passport"); 你将总是得到完全相同的单例实例,包括它的所有内部状态,由你的应用程序中的其他代码configuration。 这是由于在节点require调用中发生的caching。 需要额外代码的是,如果你想创build一个新的不同的Passport实例,在这种情况下,你需要自己调用构造函数。