【问题标题】:NodeJS using a module from different filesNodeJS使用来自不同文件的模块
【发布时间】:2015-03-12 14:41:09
【问题描述】:

假设我想配置和使用passport 模块。

在我的app.js 中,我的模块配置如下:

passport = require('passport'); // load module
app.use(passport.initialize()); // initialize passport
app.use(passport.session());    // use session

现在,我想为我的应用配置路由。但是,我将其保存在一个单独的文件中,即./lib/router.js。问题是我是否应该将我配置的passport 变量传递给该文件,或者将require 再次传递给该文件中的护照模块。

举例说明:

// **app.js**
router = express.Router() // declare router
// option (A) Do I have to pass the passport variable to be using that same variable I have already defined in app.js?
app.use(require('./lib/router')(router, passport))

// **lib/router.js**
// option (B) or, can I just 'require' another passport module and affect the same module said in app.js?
passport = require('passport')
module.exports = (router) ->
    router.get('/authenticate', passport.authenticate('local'))

我希望解释清楚。我还想知道在多个位置使用模块的这种情况下的“首选”做法(mongoose 是另一个模块,不同的文件需要它来声明模型)。

提前致谢。

【问题讨论】:

    标签: node.js module require


    【解决方案1】:

    Passport 包导出 Passport 类的一个实例,所以如果你这样做:

    var passport = require('passport');
    

    在您的路线中,您将使用相同的实例。

    来自 Passport 库的源代码:

    exports = module.exports = new Passport();
    

    【讨论】:

    • 对不起,如果我理解不正确,但是如果需要创建类的实例,这是否意味着两个不同的实例不会相互影响?
    • 没有两个实例,因为所需文件中的代码总是执行一次,也就是说,passport var 是 Singleton。当您需要它时,它总是为您提供相同的实例。
    • 我明白了。我认为令人困惑的是每次需要模块时都会运行new Passport()。但是,该模块正在导出该类的“一个”实例。
    猜你喜欢
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 2014-01-19
    • 2014-01-27
    • 2012-08-16
    相关资源
    最近更新 更多