主要的js

var count = 1;

// psuedocode
// if (words typed begins with @add)
require('./添加js');

// if (words typed begins with @remove)
require('./go 除js');

// if (words typed begins with @total)
require('./全部的js');



module.exports.count = count;

全部的js

var count = require('./主要的js').count;
安慰日志(log)(count);

添加js

var count = require('./主要的js').count;
count += 10;
安慰日志(log)(count);

go 除js

var count = require('./主要的js').count;
count -= 10;
安慰日志(log)(count);

安慰日志(log)

 1
 11
 -9

背景:

我有一个应用程序(irc bot),我想添加一个peeps可以执行@add 1或@remove 1的功能.我有一条主线.js需要不同的文件,这取决于所说的触发器.所以add会触发add.js文件,然后需要('主要的js')并向其中添加10(为了简化,它实际上会解析数字并使用该数字).我遇到的问题是,当有人四处走动并执行@remove时.它需要('主要的js'),并从1中减go 10,得到-9.做@total会得到1.

我已经很好地搜索了模块.我还没有遇到像上面列出的例子.The docs.不要包含任何接近我想要做的事情的例子;这些问题12我理解——但对我来说没有任何用处——因为我理解那里说的话.

问题:

我想让@add和@remove操作同一个变量(count),让@total返回count的总数,同时考虑@add和@removes.我正在使用模块.出口错误;还是有一种共享变量的常见方式,一个文件可以修改模块的内容.导出并将结果返回给main.js文件?

推荐答案

你的问题是,当你做var count = require('./main.js').count;次时,你会得到该数字的副本,而不是参考.更改count不会更改"源".

但是,您应该具有文件导出功能.需要一个文件只会在第一次运行它,但之后它会被缓存,不会重新运行.see docs

建议#1:

// main.js
var count = 1;
var add = require('./add.js');
count = add(count);

// add.js
module.exports = function add(count) {
    return count+10;
}

#2:

var count = 1;
var add = function() {
    count += 10;
}
add();

#3:就我个人而言,我会创建一个计数器模块(这是一个单独的实例,但您可以轻松地将其设置为"类"):

// main.js
var counter = require('./counter.js');
counter.add();
console.log(counter.count);

// counter.js
var Counter = module.exports = {
    count: 1,
    add: function() {
        Counter.count += 10;
    },
    remove: function() {
        Counter.count += 10;
    }
}

Node.js相关问答推荐

如何使用NodeJS处理来自请求的单个或多个文件?

当FastifyJS向客户端发送响应时,apache 不会将其发送给他

根据我的测试,为什么在编写Varint代码方面,NodeJS要比Rust快这么多?

无法使用Sequelize连接AWS RDS

即使卷已设置,Docker Nodemon 也不会热重载

将 POST 的 json 变量格式化为 lambda

在 TypeScript 中正确键入 MongoDB find 方法

如何在带有 JS 的 Nodejs 中使用没有 Async 方法的 Await

如何在 Docker 容器中 SSO 登录 AWS(使用 aws-sdk v3)

npm install 在 Mac 上的 Node-gyp 构建错误

Nodejs mongoose 在一个查询中从多个集合中获取结果

后端位于 Docker 容器中时的 SvelteKit SSR fetch()

Sharp JS 依赖关系 destruct 了 Elastic Beanstalk 上的 Express Server

Azure Function 在 2022 年 4 月 26 日禁用将用户字段设置为 HTTP 请求对象

Dart 语言比 JavaScript (Node.js) 有什么好处

为什么 Node 控制台不显示功能代码?

代理(如提琴手)可以与 Node.js 的 ClientRequest 一起使用吗

node.js 模块和函数中this的含义

使用 Node.js 和 Express 进行简单的 API 调用

如何断言不为空?