node.js - 如何在不同 .js 文件中的函数之间读取、更新和传递变量?
问题描述
所以,我正在开发一个有一些功能的不和谐机器人。我正在使用 node.js 和 discord.js。我把代码分解成几个文件,因为它太长了,所以现在我需要一些东西来在函数之间传递全局变量并每次更新它们。
我尝试的第一种方法是通过参数,但是变量不会因其他函数而改变。
1.
async function prepare(message, parameters)
{
// Code here
}
对于第二种方法,我尝试使用 JSON 对象。读取和更新我使用的值readFile
和writeFile
. 问题是在编写 JSON 对象时,一些数据丢失了,因为某些原因,值被简化了,然后产生了错误。特别是,被破坏的价值来自一个ReactionCollector
物体。
2.
// Reads external JSON object.
let rawdata = fs.readFileSync('config.json');
let obj = JSON.parse(rawdata);
// do something with obj.
// Writes JSON object.
let data = JSON.stringify(obj);
fs.writeFileSync('config.json', data);
我最后一次尝试是使用不同类型的 writeFile 函数,它保留了数据,但是在多次读取 JSON 对象时会产生问题。
3.
// Reads external JSON object.
const readFile = promisify(fs.readFile);
var data = await readFile('../config.json', { encoding: 'utf8' });
let obj = JSON.parse(data);
// Do something.
// Updates JSON object.
fs.writeFile('../config.json', packageJson, { encoding: 'utf8' }, err => {
if (err) throw err;
console.log("Wrote json.");
});
任何可以使此代码工作的人?
解决方案
我发现最好和更简单的方法是对每个变量使用 getter/setter 函数。
这是一个例子:
var binary_tree = [];
function setBinary_tree(bt)
{
binary_tree = bt;
}
function getBinary_tree()
{
return binary_tree;
}
module.exports.setBinary_tree = setBinary_tree;
然后这里是变量传递到外部文件的方式:
const { getBinary_tree, setBinary_tree } = require('./path/variables.js');
var binary_tree = getBinary_tree();
// Do something with the variable.
// At the end, updates the variables.
setBinary_tree(binary_tree);
推荐阅读
- rx-java - 如何跳过错误并继续处理流
- sql - 以下场景如何使用分区
- javascript - “documentRef”不是在更新字段时显示的有效 DocumentReference
- python - 如何使用 Django 和 REST 框架按共同值进行分页?
- r - 尝试拟合多元线性回归模型时 Predict() 函数的问题
- python-3.x - tkinter:为什么这个可移动标签在我不移动时会移动?
- css - 当给定显示:块时,是什么使按钮不会增长到 100% 宽度?
- amp-html - 在另一个动画之后触发动画
- node.js - 在 Node.js / Puppeteer 中使用 Tor 包时是否可以加快 IP 地址的更改?
- asp.net-core-mvc - 基于请求路由的条件验证与 asp.net core 2.2 和 FluentValidation