Как правильно работать с методом fs.readdir() в Node.js?

144
12 января 2020, 16:50

Я писал бота для Discord на Node.JS (в VSCode) и столкнулся с ошибкой:

TypeError: Cannot read property 'filter' of undefined
    at fs.readdir (C:\Users\Asus\Desktop\GGBOT\ggame.js:11:25)
    at FSReqWrap.args [as oncomplete] (fs.js:140:20)
PS C:\Users\Asus\Desktop\GGBOT> node ggame.js
{ [Error: ENOTDIR: not a directory, scandir 'C:\Users\Asus\Desktop\GGBOT\cmds\ping.js']
  errno: -4052,
  code: 'ENOTDIR',
  syscall: 'scandir',
  path: 'C:\\Users\\Asus\\Desktop\\GGBOT\\cmds\\ping.js' }
C:\Users\Asus\Desktop\GGBOT\ggame.js:11
    let jsfiles = f.filter(f => f.split(".").pop() === "js");

Код:

const Discord = require('discord.js');
const bot = new Discord.Client();
bot.commands = new Discord.Collection();
const fs = require('fs');
let config = require('./botconfig.json');
let token = config.token;
let prefix = config.prefix;
fs.readdir("./cmds/ping.js", (err, files) => {
  if (err) console.log(err)
  let jsfiles = files.filter(f => f.split(".").pop() === "js");
  if (jsfiles.length <= 0) console.log("EEERRR (нету комманд)!!!");
  console.log(`Тебе доступно: ${jsfiles.length} строк комманд`)
  jsfiles.forEach((f, i) => {
    let props = require(`./cmds/${f}`);
    console.log(`${i + 1}.${f} Загружен!`);
    bot.commands.set(props.help.name,props);
  })    
})
bot.on('ready', () => {
  console.log(`Включение! 1.. 2.. 3.. Бот ${bot.user.username} Включиился`);
  bot.generateInvite(["ADMINISTRATOR"]).then(link => {
    console.log(link)
  })
});
bot.on('message', msg => {
  if (message.author.bot) return;
  if (message.channel.type == "dm") return;
  let user = message.author.username;
  let userid = message.author.id;
  let messageArray = message.content.split(" ");
  let command = messageArray[0].toLoserCase();
  let args = messageArray.slice(1);
  if (message.content.startWith(prefix)) return;
  let cmd = bot.commands.get(command.slice(prefix.length));
  if (cmd) cmd.run(bot,message,args);
})    
bot.login(token);

начиная с const Discord сам код

Answer 1

Ты пытаешься получить листинг папки, обращаясь к файлу ping.js, и он тебе пишет, что это не папка.

В fs.readdir() поменяй путь "./cmds/ping.js" на "./cmds":

fs.readdir("./cmds", (err, files) => { /* ... */ });
READ ALSO
Как в Swiper-слайдере динамически добавлять класс слайду?

Как в Swiper-слайдере динамически добавлять класс слайду?

Использую Swiper-слайдерВ слайдере есть 4 видимых слайда

173
Wysihtml5 - удалять html-теги при paste

Wysihtml5 - удалять html-теги при paste

Нужно удалять теги html при вставке текста в форму из буфера обмена

129
Менять свойство transform: rotate через JS

Менять свойство transform: rotate через JS

Изначальная задача у меня это менять по кругу цветные квадратыДумаю это сделать меняя свойство transform: rotate у большого квадрата

145
Вставить после нужного мне элемента в массиве тире, пример: 1920 - 2020

Вставить после нужного мне элемента в массиве тире, пример: 1920 - 2020

У меня есть массив, и всё никак не получается вставить тире между годами, чтобы было понятно что выбрал не только 1920,2020 года а выбрать именно...

138