Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 全局数据对象_Javascript_Node.js_Discord.js - Fatal编程技术网

Javascript 全局数据对象

Javascript 全局数据对象,javascript,node.js,discord.js,Javascript,Node.js,Discord.js,从第二个文件加载数据对象时,该对象为空。是否有任何方法可以获取所有文件上的对象子对象 index.js: const {ShardingManager} = require('discord.js'); require('dotenv').config(); const chalk = require('chalk'); const storage = require('./Modules/GlobalStorage'); storage.setDataObject('test', 'test

从第二个文件加载数据对象时,该对象为空。是否有任何方法可以获取所有文件上的对象子对象

index.js:

const {ShardingManager} = require('discord.js');
require('dotenv').config();
const chalk = require('chalk');
const storage = require('./Modules/GlobalStorage');

storage.setDataObject('test', 'test_value');

console.log(chalk.yellow(`Shard Manager Data: ${JSON.stringify(storage.listDataObjects())}`));

let shardManager = new ShardingManager('./Shard/index.js', {
    totalShards: 2,
    token: process.env.CLIENT_TOKEN
});
shardManager.spawn();
shardManager.on('shardCreate', (shard) => {
    console.log(chalk.rgb(75,0,130)(`[SHARD] Created Shard (ID: ${shard.id})`));
});
模块/GlobalStorage.js:

let DataObject = {};
exports.listDataObjects = () => {
   return DataObject;
};
exports.setDataObject = (key, property) => {
   DataObject[key] = property;
   if(DataObject[key]) return true;
};
exports.getDataObject = (key) => {
   return DataObject[key];
};
Shard/index.js:

const {listDataObjects, getDataObject} = require("../Modules/GlobalStorage");

console.log(chalk.yellow(`Shard Data: ${JSON.stringify(listDataObjects())}`));
我标记discord.js的原因是,这是我的discord bot,它是分片的,这是(我相信)问题所在。

生成的分片是一个新进程,它不与主进程共享内存。它们不能访问相同的全局变量或任何其他变量-它们之间的唯一通信必须通过第三方(如磁盘上的文件或缓存服务器)或通过IPC(
process.send
etc)进行

哪种方法最适合您取决于您实际需要这种全局存储的原因。我个人会推荐一些类似的东西,但是你也可以考虑简单地写一个IPC驱动程序来获取你想要的任何信息。分别寻找和寻找主人和工人

我不推荐的最后一种方法是让主进程在修改文件时将其写入磁盘,并让工作进程在每次需要获取信息时从磁盘读取文件。如果此全局对象将被高度使用(discord bot-这是全局成员缓存还是什么?),这是非常不可取的,因为您的I/O负载将很高且容易损坏。请使用上述建议的解决方案之一