- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经读过好几次了,应该尽可能避免使用单例。我所说的单例是指这种代码
exports = module.exports = new Passport();
此代码来自 Node.js 模块 PassportJS。它允许我们使用 Passport 并添加一些将在我们的整个代码中共享的变量。
如您所见,我们可以编写以下代码: https://github.com/ragulka/sails-starter-app/blob/master/api/controllers/SessionController.js(这只是一个例子,我也是这样做的,我不怪任何人)。请注意,他正在使用 require 在文件顶部获取 Passport ,然后使用之前在代码中添加的策略之一。显然这很方便,但这是最好的方法吗?
是否无法从以前的代码中传递 Controller 内的 Passport 变量?
如果有不清楚的地方,请告诉我。
提前致谢。
最佳答案
有这样的情况, Passport 实例、express 应用程序实例、mongodb 连接池、记录器实例等,其中最常见的情况是每个 Node 进程一个实例。在这些情况下,单例可以很方便并保持代码简洁,前提是该模块还提供了一种简单的方法来访问和调用构造函数,以便在您需要多个实例的少数情况下(例如,如果您的应用程序想要 2 个不同的连接池)例如,2 个不同的 mongodb 数据库,或 2 个不同的日志流)。
但这有时对于测试、模拟、 stub 等来说可能会很不方便。
Is there no way to pass passport var inside controllers from previous code ?
是的,有。当您执行 var Passport = require("passport"); 时,您将始终获得完全相同的单例实例,包括应用程序中其他代码配置的所有内部状态。这是由于 Node require
调用中发生的缓存所致。如果您想创建一个新的不同的 Passport
实例,则需要额外的代码,在这种情况下您需要自己调用构造函数。
关于node.js - 避免 Node.js 中的单例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27220604/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!