Error: ENOTDIR: not a directory, scandir error on interactionCreate
Error: ENOTDIR: not a directory, scandir error on interactionCreate
我在 Commands
中的所有文件都可以正常读取,但我从 'interactionCreate.jslocated in
Events`
中收到错误
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
我在 Commands
中的所有文件都可以正常读取,但我从 'interactionCreate.jslocated in
Events`
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