В четвертой части блога мы узнали, как использовать npm-пакет yargs, который помогает получить пользовательскую команду из терминала, не используя слишком много логики в нашем коде. Если вы не следили за предыдущими блогами, я предлагаю вам поискать модульную систему Node.js, части 1, 2, 3, 4, прежде чем погрузиться в этот.

В прошлый раз мы добавили команду yargs для добавления заметок, но теперь в этом блоге мы также будем практиковать другие команды, такие как удаление, чтение и список, и увидим, как использовать формат JSON для сохранения данных и извлечения их из файла.

Команда удаления:

команда удаления аналогична команде добавления, но вместо добавления в свойстве команды мы должны иметь значение «удалить». Затем у нас есть описательное свойство, которое является необязательным, но описывает, для чего предназначена эта команда, и, наконец, у нас есть наша функция-обработчик, которая в данный момент выводит сообщение, но позже мы добавим ей больше функциональности.

Теперь, когда вы знаете, как создать команду «добавить» и «удалить», попробуйте добавить команду для чтения определенной заметки и перечислить все заметки. На данный момент я делаю так, чтобы эти команды выводили сообщение и ничего больше.

Теперь пришло время узнать, как хранить данные для нашего приложения для заметок, это означает, что когда мы получаем эту информацию, мы переходим из командной строки, мы должны выяснить, что сохранить, получить доступ или изменить их.

Во-первых, нам нужно использовать файловую систему или основной модуль «fs», чтобы сохранить наши заметки в нашей файловой системе. Эти данные будут храниться в формате данных Джейсона. Цель состоит в том, чтобы создать массив объектов, где каждый объект является заметкой, и каждый объект будет содержать свойства, такие как заголовок и тело.

Давайте сначала рассмотрим, как работать с данными JSON и передавать их с помощью файла fs. JSON лучше работает с массивами и объектами в Javascript.

Начнем с создания объекта person, не стесняйтесь использовать свое имя и пол:

const user = {
 name: "Moustafa",
 gender: "Male"
}

Теперь нам нужно преобразовать этот объект в формат JSON, и мы собираемся использовать метод stringify(), этот метод принимает значение Javascript и возвращает представление JSON.

const userJSON = JSON.stringify(user)

теперь мы можем выйти из этого в терминале, чтобы увидеть результаты:

Он похож на наш объект JS, разница в том, что он имеет двойные кавычки как в свойствах, так и в значениях.

После того, как мы увидели, как преобразовать объект в файл JSON, нам также нужно увидеть обратный метод, который берет файл JSON и преобразует его в объект. Потому что мы храним наши данные в формате JSON, но мы не можем с ними работать или обращаться к ним, пока значение не будет преобразовано обратно в формат Javascript.

Метод, который мы сейчас рассмотрим, — это «parse()», который работает точно так же, как и предыдущий, но вместо этого возвращает нам объект Javascript.

const parsedUser = JSON.parse(userJSON)

Теперь мы должны вернуть наш исходный объект, и вы можете проверить это, выведя на консоль значение как в формате JSON, так и в формате JS:

Теперь мы увидели, как мы можем хранить данные в формате JSON и вызывать эти данные, конвертируя их в формат JS. Следующий шаг — сохранить эти данные в файловой системе и вызвать их обратно из этого файла.

Начнем с загрузки модуля fs:

const fs = require("fs")

теперь нам нужно использовать метод «writeFileSync()» в модуле fs, который принимает два аргумента: имя файла и данные для сохранения.

fs.writeFileSync('users-json.json', userJSON)

Исправив наш файл сейчас, мы собираемся создать совершенно новый файл «users-json.json». Внутри этого файла мы будем хранить наши данные:

Мы создали наш первый файл JSON и сохранили данные внутри. Следующий шаг — вызвать эти данные из этого файла и преобразовать их обратно в JS.

Во-первых, вызовите весь предыдущий код, потому что мы уже создали наш файл. Сейчас мы используем метод readFileSync(). Как следует из названия, этот метод считывает файл, который мы собираемся передать в качестве аргумента, в данном случае «users-json.json», который является файлом, который мы только что создали для хранения наших данных.

Однако этот метод не возвращает данные JSON. Вместо этого мы получим буферную версию этих данных с битами и байтами. Давайте изучим это в консоли

const dataBuffer = fs.readFileSync('users-json.json')
console.log(dataBuffer)

вывод:

Чтобы получить данные в формате JSON по мере их сохранения, нам нужно вызвать «toString()»:

console.log(dataBuffer.toString())

Теперь, если мы выведем эту информацию с помощью console.log() на консоль, мы сможем увидеть представление данных в формате JSON.

{"name":"Moustafa","gender":"Male"}

Чтобы упростить этот процесс, я собираюсь объединить метод toString() в конце метода readFuleSync():

const dataJSON = fs.readFileSync('users-json.json').toString()

теперь нам нужно использовать метод parse(), который мы исследовали ранее, чтобы передать эту информацию обратно в объект JS и получить доступ к информации:

const data = JSON.parse(dataJSON)

сделано, теперь у нас есть обратно наша информация, и мы получаем доступ к «data.name», мы можем видеть сохраненное имя:

console.log(data.name)

Вывод:

Moustafa

В этом блоге мы узнали, как сохранять и получать доступ к данным JSON. В следующем блоге мы собираемся применить эти знания для сохранения данных, поступающих от пользователя, и обратного доступа к ним.