Возникли проблемы при записи данных в файл с помощью fs (javascript) - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь установить для переменной в отдельном файле json значение false / true в зависимости от его состояния, и при попытке сделать это получаю ошибку.

Вот используемые переменные:

const fs = require("fs");
const maintenancefile = require("../util/maintenance.json");
let state = maintenancefile.maintenancestatus;
JSON.stringify(state);
let changetofalse = "{\n\"maintenancestatus\": \"false\"\n}"
JSON.stringify(changetofalse);
let changetotrue = "{\n\"maintenancestatus\": \"true\"\n}"
JSON.stringify(changetotrue);

И вот процесс, который я пытаюсь записать в файл:

module.exports = {
    name: 'maintenance',
    description: "PUTS BOT IN MAINTENANCE MODE - BOT ADMINISTRATOR ONLY",
    execute(message, args){
       if(message.member.user.id != '294773357864550401') return;
       if(state = "false") {
           fs.writeFile(maintenancefile, changetotrue, (err) => {
            if (err) console.log(err)
          });
           return message.channel.send("BOT PUT IN MAINTENANCE MODE - REQUESTED BY " + message.member.user.tag + " (" + message.member.user.tag + ").")

       }
       if(state = "true") {
           fs.writeFile(maintenancefile, changetofalse, (err) => {
            if (err) console.log(err)
          });
           return message.channel.send("BOT TAKEN OUT OF MAINTENANCE MODE - REQUESTED BY " + message.member.user.tag + " (" + message.member.user.tag + ").")
       }
       return;
       // WIP
    }
}

module.exports.help = {
    name: 'maintenance',
    description: 'PUTS BOT IN MAINTENANCE MODE - BOT ADMINISTRATOR ONLY'
}

Я получаю следующую ошибку:

TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be one of type string, Buffer, or URL. Received type object
    at Object.open (fs.js:409:3)
    at Object.writeFile (fs.js:1168:6)
    at Object.execute (/Users/name/Downloads/litemoderation-master/commands/maintenance.js:18:15)
    at Client.bot.on.message (/Users/name/Downloads/litemoderation-master/index.js:150:40)
    at Client.emit (events.js:182:13)
    at MessageCreateHandler.handle (/Users/name/node_modules/discord.js/src/client/websocket/packets/handlers/MessageCreate.js:9:34)
    at WebSocketPacketManager.handle (/Users/name/node_modules/discord.js/src/client/websocket/packets/WebSocketPacketManager.js:103:65)

Заранее спасибо: )

1 Ответ

1 голос
/ 03 марта 2020

Вот как можно исправить ошибку, которую вы получаете. Вы заметите, что это когда вы звоните writeFile. Если вы посмотрите на writeFile документы , первым аргументом должен быть путь к файлу. Для этого вы передаете maintenancefile, который определяется как:

const maintenancefile = require("../util/maintenance.json");

Именно поэтому он говорит, что параметр path - это не ожидаемая строка (путь к файлу), а что-то еще .

Если вы намеревались перезаписать этот файл, а не анализировать JSON, тогда вы можете использовать require.resolve('../util/maintenance.json'), который даст вам путь к файлу вместо проанализированного содержимого файла.

...