День 32 уже в книгах! Сегодня мы узнали о KNEX.JS, которая представляет собой полнофункциональную библиотеку построения SQL-запросов и схем для Javascript. Я знаю, что вы, вероятно, разочарованы. Вы надеялись, что это как-то связано с k’Nex, которого вы помните, когда были ребенком. У меня есть хорошие новости и плохие новости. Хорошая новость в том, что если вам нравится Javascript, эта версия KNEX может быть интересной. Плохая новость в том, что мы все уже взрослые и, вероятно, никогда больше не сможем играть с настоящим k’Nex.

Однако эта версия KNEX действительно интересна. Это значительно упрощает создание схемы базы данных. Это также упрощает создание таблиц, а также предоставляет вам хорошую историю версий. Во вчерашней статье мы рассмотрели, как работать с базой данных Postgres с использованием SQL. Сегодня я хочу показать вам пример из задания, над которым я работаю в классе.

Прежде чем я покажу вам, как работает KNEX, я хочу поговорить о некоторых отличиях и преимуществах, которые он имеет по сравнению с использованием чистого SQL. С KNEX вы создаете таблицы и отношения между таблицами, используя файлы миграции. В файле миграции вы определяете схему своей базы данных. Здесь вы создаете таблицы, назначаете имена столбцам и указываете типы данных и ограничения для этих столбцов.

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

Выше я создал базу данных под названием reddit_clone. Я тоже подключился к этой базе данных. Наконец, я запустил команду display table, и вы видите, что в настоящее время в базе данных нет таблиц. Теперь мы займемся этой проблемой. Помните, что в KNEX мы используем миграции для создания таблиц. Давайте посмотрим на пример файла миграции:

На скриншоте выше представлен файл миграции. В файле создается новая таблица с названием posts. Он добавляет автоматически увеличивающийся столбец идентификатора и устанавливает его в качестве первичного ключа. Затем он добавляет столбец «Заголовок» и заявляет, что он не может быть нулевым. Если в него передано нулевое значение, в качестве значения по умолчанию этого столбца будет установлена ​​пустая строка. Затем мы добавляем столбец «Body», который также не допускает значения NULL и по умолчанию будет использовать пустую строку, если значение не передано. Затем мы создаем внешний ключ «user_id». Он не может быть пустым и ссылается на столбец «id» в таблице пользователей. Мы также говорим об удалении «КАСКАД», что означает, что если мы попытаемся удалить этот столбец, он также удалит все связанные данные. В строке 19 мы добавляем столбец временных меток. Это добавит столбцы «Создано в» и «Обновлено в» каждый раз, когда добавляется или обновляется новая запись. У нас есть несколько вариантов того, что мы можем сделать с этим файлом. Один из них - запустить файл, сообщив KNEX, что мы хотим перейти на самую последнюю версию. Второй - сообщить KNEX, что мы хотим отменить или удалить только что созданную таблицу, сообщив knex, что мы хотим вернуться к предыдущей версии миграции. Посмотрим, работает ли наш файл. Чтобы проверить это, нам нужно запустить эту команду «knex migrate: latest». Давай посмотрим что происходит:

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

Как видите, у нас есть несколько таблиц, одна из которых - столбец сообщений из примера. Комментарии и таблицы пользователей взяты из двух дополнительных файлов миграции, которые я создал. Таблицы KNEX создаются по умолчанию, поэтому мы пока их игнорируем. Давайте проверим нашу таблицу сообщений немного дальше, чтобы убедиться, что дополнительные свойства были успешными:

Вы можете видеть, что различные ограничения и типы данных, которые мы указали, были успешными. KNEX также сделал несколько вещей для нас автоматически, например, установил по умолчанию для типа данных для столбца заголовка значение «символьное изменение» (255). Все, что мы указали при миграции, это то, что значение будет строкой, поэтому KNEX сделал для нас некоторые предположения. Хорошо, теперь, когда у нас есть несколько таблиц, нам нужно добавить данные в эти таблицы.

В KNEX мы можем использовать что-то, называемое начальным файлом, для «затравки» или добавления данных в наши таблицы. Это обычная практика на этапе разработки. Это позволяет нам проверить, что все работает правильно, без риска использования данных в реальном времени. Давайте посмотрим, как выглядит исходный файл:

Обратите внимание на строку 6, как мы выбираем таблицу пользователей, а затем первое, что мы делаем, это удаляем все в таблице. Это предотвращает добавление повторяющихся данных при каждом запуске наших исходных файлов. Далее мы начинаем вставку пользователей. Мы включаем id, full_name и username для каждой вставки. Возможно, вы уже заметили, что KNEX использует обещания, которые обеспечивают удобный и понятный способ управления потоком управления. Давайте попробуем запустить этот исходный файл и посмотрим, что произойдет:

Это сработало! Как видите, мы набираем «knex seed: run», чтобы запустить файл. Мы видим, что мы успешно запустили 1 исходный файл. Затем нам нужно проверить нашу базу данных и посмотреть, действительно ли у нас есть какие-либо данные:

Как видите, мы успешно загрузили некоторые данные в наш файл. Это довольно подробный обзор KNEX, но, надеюсь, вы начинаете понимать, насколько он мощный. Мне действительно нравится использовать KNEX намного больше, чем SQL. Это тоже неплохо, но KNEX предоставляет некоторые удобства, которые я очень ценю. Надеюсь, вам понравился этот небольшой пробег. Оставьте комментарий, если у вас есть какие-либо вопросы по поводу того, что я здесь показал, и я обязательно свяжусь с вами.

Завтра мы собираемся потратить большую часть дня на работу над клоном Reddit, который вы могли заметить из примеров в этом блоге. Это будет наше первое приложение CRUD с полным стеком. Я очень рад поработать над этим до конца недели. Я буду держать вас в курсе, как идут дела. Оставайтесь с нами для получения дополнительной информации!

32 вниз 68 осталось!