模块化模块?在父

时间:2016-04-28 07:48:28

标签: javascript node.js express

编写node.js模块,并希望尝试分解我的代码/保持整洁。

基本上,我想要的是为模块的每个部分(身份验证,用户等)创建一个单独的文件/文件夹,并从父包中获取它们,然后公开它们。

例如,文件结构为:

index.js
auth.js
users.js

index.js内,有:

module.exports = {
    some_variable : 1,
    authentication_variable : '',
    auth : require('./auth'),
    users : require('./users')
}

然后,我希望some_variable可以从每个软件包中访问,users可以引用auth,反之亦然,并设置authentication_variable auth

基本上,我希望它们在一个类中,但由于它将在Express应用程序中的多个路由中使用,我希望它保留主文件中所需的变量/状态。< / p>

如果我将所有内容保存在同一个文件中,但我不确定如何操作,我可以这样做,因为当我需要该文件时,它无法访问它的父母&#39;范围。

到目前为止,我作为一名MWE:

module.exports = x = {
    globals : {
        id : 123456
    },
    auth : {
        setId : function(id){
            x.globals.id = id;
        },
        getAuthToken : function(){
            return x.globals.id;
        }
    },
    users : {
        doThing : function(name, id){
            x.auth.setId(id);
            console.log(x.auth.getAuthToken === id); // true
        }
    }
}

我已尝试过以下建议,但它无效。我不能在另一个模块内部拥有子函数,这些子函数仍然可以访问最大范围。

理想情况下,我想要一种方法,包括所有内容test-package

index.js
module.exports = {
    test : function(){
        console.log(this); // shows this entire object {test : function, auth: function}
    },
    auth : require('./auth')
}

auth.js
module.exports = {
    check : function(){
        console.log(this); // shows {test : function, auth : function}
    }
}

然后,在一个单独的项目中

var my_mod = require('test-package');
my_mod.test(); // shows as before
my_mod.auth.check(); // shows same

如果无法做到这一点,至少可以从index.js内访问整个auth.js模块。

1 个答案:

答案 0 :(得分:0)

您可以使用QueryContainerDescriptor<T>关键字:

<强> index.js

this

<强> module.js

require('./module').auth();

<强> auth.js

module.exports = {
  some_var: 1,
  auth: require('./auth'),
  user: require('./user')
}

<强> user.js的

module.exports = function() {
  console.log(this);
  this.some_var = 10;
  this.user();
}