开发者问题收集

我怎样才能制作事件处理程序

2021-05-06
435

我完成了命令处理程序,但出现了错误,想知道社区中是否有人可以帮助我解决该问题?

我的代码:

const fs = require('fs');

module.exports = (client, Discord) => {
    const load_dir = (dir) => {
        const event_files = fs.readdirsync(`./events/${dirs}`).filter(file => 
    file.endsWith(`.js`));

    for (const file of event_files){
        const event = require(`./events/${dirs}/${file}`);
        const event_name = file.split('.')[0];

        client.on(event_name, event.bind(null, Discord, client));
    }
}
['client', 'guild'].forEach(e => load_dir(e));
}

我的错误:

ReferenceError: dirs is not defined
at load_dir (/home/runner/Buddy-Bot/handlers/event_handler.js:5:50)
at /home/runner/Buddy-Bot/handlers/event_handler.js:14:35
at Array.forEach (<anonymous>)
at module.exports (/home/runner/Buddy-Bot/handlers/event_handler.js:14:22)
at /home/runner/Buddy-Bot/index.js:11:34
at Array.forEach (<anonymous>)
at /home/runner/Buddy-Bot/index.js:10:38
at Script.runInContext (vm.js:130:18)
at Object.<anonymous> (/run_dir/interp.js:209:20)
at Module._compile (internal/modules/cjs/loader.js:999:30)

如果您能提供帮助,我将不胜感激!

2个回答

您使用的是 dirs ,但实际上并没有这样的变量。我认为您应该使用 dir

Juan Pablo
2021-05-06

这很简单,当它显示 ReferenceError: dirs is not defined 这意味着您尝试使用尚不存在的变量。 将“dirs”更改为 dir,它应该可以解决您的问题。

已修复代码:

const fs = require('fs');

module.exports = (client, Discord) => {
    const load_dir = (dir) => {
        const event_files = fs.readdirSync(`./events/${dir}`).filter(file => 
    file.endsWith(`.js`));

    for (const file of event_files){
        const event = require(`./events/${dir}/${file}`);
        const event_name = file.split('.')[0];

        client.on(event_name, event.bind(null, Discord, client));
    }
}
['client', 'guild'].forEach(e => load_dir(e));
}

当您看到这样的错误时,您应该尝试找到有问题的文件。如果您在此之前正在编辑主文件,请尝试查找“index.js”。如果是另一个文件,请找到该文件。接下来,找到发生错误的行。您可以在这里找到它: at /home/runner/Buddy-Bot/index.js:**11**:34

我还发现您的代码还有另外两个问题,将 readdirsync 更改为 readdirSync。Node.js 区分大小写。第二个问题是 modules.exports 没有 s,将其更改为 module.exports

感谢阅读!

Unknown1789
2021-05-08