NodeJS — Доступ к массиву в другом файле класса

#javascript #node.js #arrays #module.exports

#javascript #node.js #массивы #module.exports

Вопрос:

Я пишу приложение NodeJS, которое может выполнять некоторые очереди в Discord. Мой main включает в себя массив, называемый queuedPlayers и определенный в следующем коде:

 // Define our required packages and our bot configuration 
const fs = require('fs');
const config = require('./config.json');
const Discord = require('discord.js');

// Define our constant variables 
const bot = new Discord.Client();
const token = config.Discord.Token; 
const prefix = config.Discord.Prefix;
let queuedPlayers = []; 

// This allows for us to do dynamic command creation
bot.commands = new Discord.Collection();
const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js')); 

for (const file of commandFiles) {
    const command = require(`./commands/${file}`);
    bot.commands.set(command.name, command)
}

// Event Handler for when the Bot is ready and sees a message
bot.on('message', message => {
    if (!message.content.startsWith(prefix) || message.author.bot) return;

    const args = message.content.slice(prefix.length).trim().split(' ');
    const command = args.shift().toLowerCase();
    
    if (!bot.commands.has(command)) return;

    try {
        bot.commands.get(command).execute(message, args);
    } catch (error) {
        console.error(error);
        message.reply('There was an error trying to execute that command!');
    }

});

// Start Bot Activities 
bot.login(token); 
  

Затем я создаю команду в отдельном JS-файле и пытаюсь получить доступ к массиву игроков в очереди, чтобы таким образом я мог добавить к ним:

 module.exports = {
    name: "add",
    description: "Adds a villager to the queue.",
    execute(message, args, queuedPlayers) {
        if (!args.length) {
            return message.channel.send('No villager specified!');
        }

        queuedPlayers.push(args[0]);
    },
};
  

Однако он продолжает сообщать мне, что он не определен и не может прочитать атрибуты переменной. Итак, я предполагаю, что он неправильно передает массив. Должен ли я использовать exports, чтобы иметь доступ к нему между разными файлами Javascript? Или было бы лучше просто использовать локальный экземпляр SQLite для создания очереди и управления ею по мере необходимости?

Комментарии:

1. Да, если вам нужно получить к нему доступ из другого файла, вы должны экспортировать его в исходный файл и запросить его в новом файле.

Ответ №1:

Это не определено, потому что вы не передаете массив

Изменить

 bot.commands.get(command).execute(message, args);
  

Для

 bot.commands.get(command).execute(message, args, queuedPlayers);