Error: ENOTDIR: not a directory, scandir error on interactionCreate

Error: ENOTDIR: not a directory, scandir error on interactionCreate

我在 Commands 中的所有文件都可以正常读取,但我从 'interactionCreate.jslocated inEvents`

中收到错误
node:internal/fs/utils:343
    throw err;
    ^

Error: ENOTDIR: not a directory, scandir './Events/interactionCreate.js'

我的Event.js文件如下:

const { readdirSync } = require('fs');
const ascii = require('ascii-table');
let table = new ascii("Events");
table.setHeading('EVENTS', ' LOAD STATUS');

module.exports = (client) => {
    readdirSync('./Events/').forEach(dir => {
        const events = readdirSync(`./Events/${dir}`).filter(file => file.endsWith('.js'));
        for(let file of events) {
            let pull = require(`../Events/${dir}/${file}`);
            if(pull.name) {
                client.events.set(pull.name, pull);
            } else {
                table.addRow(file, 'EVENT REGISTERED')
                continue;
            } if(pull.aliases && Array.isArray(pull.aliases)) pull.aliases.forEach(alias => client.aliases.set(alias, pull.name))
        }
    });
    console.log(table.toString());
}

你的问题在这里:

    readdirSync('./Events/').forEach(dir => {
        const events = readdirSync(`./Events/${dir}`)

readdirSync 将 return 所有 Events 目录中的条目,包括文件和目录。您已将变量命名为 dir 但它们并不都是目录。明确指出 ./Events/interactionCreate.js 不是目录的错误消息证明了这一点。

从您的 Events 目录中删除非目录(即移动该文件),或者更好的是,在调用 readdirSync 之前检查 dir 是否确实是一个目录。

最简单的方法是添加{withFileTypes: true}选项,然后就可以调用dir.isDirectory()

查看文档 https://nodejs.org/api/fs.html#fsreaddirsyncpath-options