编写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
模块。
答案 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();
}