我想有一个Node.js模块,它是一个包含多个文件的目录。我希望一个文件中的某些变量可以从其他文件访问,但不能从模块外部的文件中访问。有可能吗?
所以让我们假设以下文件结构
` module/
| index.js
| extra.js
` additional.js
在index.js
:
var foo = 'some value';
...
// make additional and extra available for the external code
module.exports.additional = require('./additional.js');
module.exports.extra = require('./extra.js');
在extra.js
:
// some magic here
var bar = foo; // where foo is foo from index.js
在additional.js
:
// some magic here
var qux = foo; // here foo is foo from index.js as well
Additional和Extra正在实现一些业务逻辑(彼此独立),但需要共享一些不应导出的模块内部服务数据。
我看到的唯一解决方案是从service.js
和require
再创建一个文件additional.js
和extra.js
。这是对的吗?还有其他解决方案吗?
答案 0 :(得分:1)
你能直接传递所需的东西吗?
//index.js:
var foo = 'some value';
module.exports.additional = require('./additional.js')(foo);
module.exports.extra = require('./extra.js')(foo);
//extra.js:
module.exports = function(foo){
var extra = {};
// some magic here
var bar = foo; // where foo is foo from index.js
extra.baz = function(req, res, next){};
return extra;
};
//additional.js:
module.exports = function(foo){
var additonal = {};
additional.deadbeef = function(req, res, next){
var qux = foo; // here foo is foo from index.js as well
res.send(200, qux);
};
return additional;
};
答案 1 :(得分:0)
我希望一个文件中的某些变量可以从其他文件访问,但不能从模块外部的文件中访问
是的,有可能。您可以将该其他文件加载到您的模块中,并将其交给一个特权函数,该函数可以访问模块范围中的特定变量,或者只将其交给值本身:
index.js:
var foo = 'some value';
module.exports.additional = require('./additional.js')(foo);
module.exports.extra = require('./extra.js')(foo);
extra.js:
module.exports = function(foo){
// some magic here
var bar = foo; // foo is the foo from index.js
// instead of assigning the magic to exports, return it
};
additional.js:
module.exports = function(foo){
// some magic here
var qux = foo; // foo is the foo from index.js again
// instead of assigning the magic to exports, return it
};
答案 2 :(得分:0)
好的,您可以使用“全局”命名空间来执行此操作:
//index.js
global.foo = "some value";
然后
//extra.js
var bar = global.foo;