首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Node.js中的文件之间共享变量?

在Node.js中的文件之间共享变量?
EN

Stack Overflow用户
提问于 2010-10-13 19:11:36
回答 5查看 247.7K关注 0票数 156

这里有两个文件:

代码语言:javascript
复制
// main.js
require('./modules');
console.log(name); // prints "foobar"

// module.js
name = "foobar";

当我没有"var“时,它可以工作。但当我有了:

代码语言:javascript
复制
// module.js
var name = "foobar";

名称在main.js中将是未定义的。

我听说全局变量是不好的,你最好在引用前使用"var“。但是,这是一个全局变量很好的情况吗?

EN

回答 5

Stack Overflow用户

发布于 2017-10-22 00:26:02

如果我们需要共享多个变量,请使用以下格式

代码语言:javascript
复制
//module.js
   let name='foobar';
   let city='xyz';
   let company='companyName';

   module.exports={
    name,
    city,
    company
  }

用法

代码语言:javascript
复制
  // main.js
    require('./modules');
    console.log(name); // print 'foobar'
票数 22
EN

Stack Overflow用户

发布于 2017-07-02 17:24:12

将任何想要共享的变量保存为一个对象。然后将其传递给已加载的模块,以便它可以通过对象引用访问变量。

代码语言:javascript
复制
// main.js
var myModule = require('./module.js');
var shares = {value:123};

// Initialize module and pass the shareable object
myModule.init(shares);

// The value was changed from init2 on the other file
console.log(shares.value); // 789

在另一个文件上..

代码语言:javascript
复制
// module.js
var shared = null;

function init2(){
    console.log(shared.value); // 123
    shared.value = 789;
}

module.exports = {
    init:function(obj){
        // Save the shared object on current module
        shared = obj;

        // Call something outside
        init2();
    }
}
票数 7
EN

Stack Overflow用户

发布于 2021-08-17 10:50:06

这不是一种新的方法,而是经过了一些优化。创建一个包含全局变量的文件,并通过exportrequire共享它们。在本例中,Getter和Setter更具动态性,全局变量可以是只读的。要定义更多的全局变量,只需将它们添加到globals对象。

global.js

代码语言:javascript
复制
const globals = {
  myGlobal: {
    value: 'can be anytype: String, Array, Object, ...'
  },
  aReadonlyGlobal: {
    value: 'this value is readonly',
    protected: true
  },
  dbConnection: {
    value: 'mongoClient.db("database")'
  },
  myHelperFunction: {
    value: function() { console.log('do help') }
  },
}

exports.get = function(global) {
  // return variable or false if not exists
  return globals[global] && globals[global].value ? globals[global].value : false;
};

exports.set = function(global, value) {
  // exists and is protected: return false
  if (globals[global] && globals[global].protected && globals[global].protected === true)
    return false;
  // set global and return true
  globals[global] = { value: value };
  return true;
};

在any-other-file.js中获取和设置的示例

代码语言:javascript
复制
const globals = require('./globals');

console.log(globals.get('myGlobal'));
// output: can be anytype: String, Array, Object, ...

globals.get('myHelperFunction')();
// output: do help

let myHelperFunction = globals.get('myHelperFunction');
myHelperFunction();
// output: do help

console.log(globals.set('myGlobal', 'my new value'));
// output: true
console.log(globals.get('myGlobal'));
// output: my new value

console.log(globals.set('aReadonlyGlobal', 'this shall not work'));
// output: false
console.log(globals.get('aReadonlyGlobal'));
// output: this value is readonly

console.log(globals.get('notExistingGlobal'));
// output: false
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3922994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档