Как создать базу данных Node.js с помощью Prisma и SQLite

1656020772 kak sozdat bazu dannyh nodejs s pomoshhyu prisma i sqlite

В последнее время я вижу много твитов и статей о Prisma. Это современный инструмент ORM (объектно-реляционного отображения), работающий с Node.jsand TypeScript.

Да, эта библиотека поможет вам создать базу данных Node.js и управлять ею – и она совместима с TypeScript! Он автоматически сгенерирует все типы ваших сущностей.

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

Кроме того, ORM хорошо работает с Next.js, GraphQL, Nest.Js, Express.js, Apollo и Hapi.

Подводя итог, Prisma – это современный ORM, хорошо сочетающийся со всеми современными технологиями.

Поэтому я решил попробовать и заменить свою предыдущую библиотеку управления базами данных: TypeORM.

«Prisma помогает разработчикам приложений создавать быстрее и делать меньше ошибок с помощью ORM с открытым исходным кодом для PostgreSQL, MySQL и SQLite». – Домашняя страница Prisma

Давайте создадим простую базу данных Twitter с помощью Node, Prisma и SQLite

Пора заниматься. Я покажу вам, как создать первую базу данных Node.js с помощью Prisma. Чтобы это введение было доступным, мы будем использовать Node из SQLite.

SQLite – это автономный механизм баз данных. Это означает, что вам не нужно настраивать базу данных на вашем компьютере. Если вы выполните шаги этого руководства, проект запустится сам.

Если в будущем вы хотите использовать Prisma с базой данных PostgreSQL, вот учебник по созданию базы данных PostgreSQL с помощью Docker-Compose.

Предпосылки

Прежде чем начать, найдите время, чтобы еще раз проверить, есть ли у вас версия Node.js 12.2 или выше. Если вы этого не сделаете, просто обновите свой Node перед началом следующей главы.

Примечание: Если вы хотите проверить свою версию Node.js, вы можете ввести: node -v в терминале. Выходом будет версия.

Несмотря на то, что я использую простой подход к новой библиотеке, я рекомендую вам иметь базовые знания SQL, чтобы полностью понять учебник.

Примечание: Вам не нужно быть экспертом! Здесь важны только основы, такие как создание таблицы и некоторые запросы.

Как настроить базовый проект Twitter

Сначала вам нужно создать новую папку для этого проекта и переместиться в нее:

$ mkdir minimalistic-twitter
$ cd minimalistic-twitter

Затем мы установим все обязательные зависимости, такие как TypeScript и Prisma.

$ npm init -y
$ npm install prisma typescript ts-node @types/node --save-dev
$ npm install @prisma/client

Теперь вы должны увидеть a node_modules папку да а package.json файл в вашем хранилище.

Прежде чем перейти к инициализации Prisma, последним шагом конфигурации является создание конфигурации для TypeScript в корне хранилища.

Для этого можно создать a tsconfig.json и вставьте следующую конфигурацию:

{
  "compilerOptions": {
    "sourceMap": true,
    "outDir": "dist",
    "strict": true,
    "lib": ["esnext"],
    "esModuleInterop": true
  }
}
Конфигурация TypeScript по умолчанию (tsconfig.json)

Там мы идем! Пора использовать Prisma в нашем проекте. В minimalistic-twitter папку, можно использовать такую ​​команду, чтобы вызвать выход справки Prisma.

$ npx prisma

Теперь последний шаг перед созданием нашей минималистической программы Twitter – инициализация конфигурации базы данных.

Мы будем использовать init команда, но с a --datasource-provider параметр установки типа базы данных. В противном случае, по умолчанию, init создаст базу данных PostgreSQL.

$ npx prisma init --datasource-provider sqlite

Когда команда завершит исполнение, вы должны найти в своем хранилище a .env файл и а prisma папка с a schema.prisma файл внутри него.

The schema.prisma файл содержит все инструкции по подключению к вашей базе данных. Позже он также будет содержать инструкции по созданию таблиц базы данных.

The .env файл содержит все переменные среды, необходимые для запуска проекта. Для Prisma единственной переменной является DATABASE_URL. Его значение устанавливается на ./dev.db .

The dev.db файл будет автономным файлом базы данных.

Дерево проекта после инициализации проекта
Дерево проекта после инициализации проекта

Если у вас такой же результат, поздравляем, это значит, что ваш проект готов! 🎉

Как создать нашу первую модель – пользователь

Наша основная база данных Twitter будет состоять из двух основных сущностей:

  • Объект пользователя с информацией пользователя и его твитами
  • Сущность твита с содержанием твита и его автором

Первоначально мы сосредоточимся на создании сущности пользователя. Каждый из них имеет:

  • идентификатор
  • уникальный электронный адрес (два пользователя не могут иметь одинаковый электронный адрес)
  • имя пользователя
  • список твитов

С Prisma, если мы хотим определить новую схему (модель), нам нужно сделать это в schema.prisma файл.

Чтобы определить сущность, мы будем использовать model инструкция, как показано ниже. Вы можете воспроизвести его после инструкции подключения к базе данных в вашем schema.prisma файл.

// After the database connection

model User {
  // We set an `id` variable
  // With an `Int` type (number)
  // Then, we set the Prisma decorators:
  // - @id (because it's an ID)
  // - @default(autoincrement()) (default value is auto-incremented)
  id Int @id @default(autoincrement())

  // We set an `email` variable
  // With a `String` type
  // Then, we set the Prisma decorator:
  // - @unique (because we want the user to be unique
  // based on the email - two users can't have the same)
  email String @unique

  // We set a `username` variable
  // With a `String` type
  username String

  // We set a `tweets` variable
  // With a `Tweet[]` type (one-to-many relationship)
  // Because each user can have between
  // 0 and an infinite number of tweets
  tweets Tweet[]
}
Модель пользователя с Prisma ORM

Как вы могли заметить, у нас его нет Tweet модель еще. Это будет наш следующий шаг.

Как построить нашу вторую модель – Tweet

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

Каждый из них имеет:

  • идентификатор
  • дата создания
  • текст
  • userId (автор твита)

Ниже вы найдете сущность. Вы можете воспроизвести его после User модель декларации в вашей schema.prisma файл.

// After the database connection

// After the User model

model Tweet {
  // We set an `id` variable
  // With an `Int` type (number)
  // Then, we set the Prisma decorators:
  // - @id (because it's an ID)
  // - @default(autoincrement()) (default value is auto-incremented)
  id Int @id @default(autoincrement())

  // Save the tweet creation time
  createdAt DateTime @default(now())

  // We set a `text` variable
  // With a `String` type
  text String

  // We set a `userId` variable
  // With an `Int` type (number)
  // It will link the `id` of the `User` model
  userId Int

  // We set a `user` variable
  // With a `User` type (many-to-one relationship)
  // Because each tweet has an author
  // This author is a `User`
  // We link the `User` to a `Tweet` based on:
  // - the `userId` in the `Tweet` model
  // - the `id` in the `User` model
  user User @relation(fields: [userId], references: [id])
}
Модель Tweet с Prisma ORM

Как создать нашу первую миграцию базы данных

Первое, что нам нужно сделать прежде, чем использовать нашу базу данных, это создать ее. Для этого мы воспользуемся другой командой Prisma CLI. Эта команда позволит нам создавать передвижения.

Если мы посмотрим на документацию о migrate команды, мы увидим следующее:

«Prisma Migrate – это обязательный инструмент миграции схем базы данных, который позволяет: Синхронизируйте свою схему базы данных со схемой Prisma по мере ее развития и мподдерживать имеющиеся данные в вашей базе данных.» – Документация о миграции Prisma

Идея состоит в том, чтобы сохранить нашу первую реализацию базы данных. Вы можете сделать это, введя команду ниже в своем терминале:

npx prisma migrate dev --name initialize

Примечание: Вы можете ввести название по вашему выбору после --name параметр. Помните, что имя передвижения помогает запомнить внесенные изменения.

Если ваша команда миграции выполнена успешно, это означает, что все инструкции в schema.prisma являются правильными. ✅

Теперь дерево вашего проекта должно походить на изображение ниже (за исключением хеша миграции).

Дерево проекта после генерации миграции
Дерево проекта после генерации миграции

Примечание: В migration.sql файл, вы найдете запросы SQL для создания базы данных.

Ваша база данных готова! 🚀 Пора попробовать, добавить нескольких пользователей и разрешить им твитить.

Как протестировать наш проект Node JS SQLite

Итак, смогут ли пользователи теперь писать твиты? Давайте попробуем выполнить некоторые запросы нашей базы данных. Мы создадим index.ts файл в корне хранилища и мы запишем в него некоторые инструкции.

Сначала нам нужно импортировать и инициализировать подключение к базе данных. На основе документации Prisma Quickstart мы создаем a prisma переменная для взаимодействия с базой данных и функция для написания нашего тестового кода:

import { PrismaClient } from "@prisma/client";

const prisma = new PrismaClient();

async function main() {}

main()
  .catch((e) => {
    throw e;
  })
  .finally(async () => {
    await prisma.$disconnect();
  });

Мы готовы заполнить main функция с некоторыми инструкциями.

import { PrismaClient } from "@prisma/client";

const prisma = new PrismaClient();

async function main() {
  // We create a new user
  const newUser = await prisma.user.create({
    data: {
      email: "hello@herewecode.io",
      username: "gaelgthomas", // <- it's also my Twitter username 😄
    },
  });

  console.log("New User:");
  console.log(newUser);

  // We create a new tweet and we link it to our new user
  const firstTweet = await prisma.tweet.create({
    data: {
      text: "Hello world!",
      userId: newUser.id,
    },
  });

  console.log("First tweet:");
  console.log(firstTweet);

  // We fetch the new user again (by its unique email address)
  // and we ask to fetch its tweets at the same time
  const newUserWithTweets = await prisma.user.findUnique({
    where: {
      email: "hello@herewecode.io",
    },
    include: { tweets: true },
  });

  console.log("User object with Tweets:");
  console.dir(newUserWithTweets);
}

main()
  .catch((e) => {
    throw e;
  })
  .finally(async () => {
    await prisma.$disconnect();
  });

Примечание: Если вы хотите узнать о различных инструкциях, которые вы можете использовать, хорошая страница документации Prisma – это страница CRUD.

Пора запускать index.ts файл.

Прежде чем это сделать, откройте свою package.json файл и поиск scripts См. раздел. Вам нужно будет добавить команду для запуска проекта ts-node.

Если хотите, можете заменить свой scripts раздел с следующим кодом:

"scripts": {
  "dev": "ts-node ./index.ts",
  "test": "echo \"Error: no test specified\" && exit 1"
},

Затем в своем терминале вы можете ввести команду ниже и прочитать выход, чтобы увидеть, работает ли все хорошо:

$ npm run dev

Примечание: В команде выше мы запускаем скрипт разработчика из нашего package.json.

Тестовый результат NPM с помощью Prisma
Тестовый результат NPM с помощью Prisma

Это работает! У вас есть первый пользователь и твит. 👏 Теперь, когда вы настроили свою первую базу данных с помощью Prisma, вы можете добавить в нее некоторые функции. Вот несколько идей:

  • добавить больше информации в объект пользователя (дата рождения, адрес, биография и т.д.)
  • добавить систему лайков (каждый твит может иметь лайки, каждый пользователь может иметь список лайков)

Код доступен на Github – Node JS из Prisma и SQLite

Если вы хотите получить полный код, вы можете найти его на моем GitHub.

-> GitHub: пример Prisma SQLite

Спасибо, что дочитали до конца!

Надеюсь, вы будете использовать Prisma в одном из своих последующих проектов. 🎉

Я начинаю твитить более последовательно. Если вы хотите получить дополнительные советы и ресурсы по веб-программированию -> Найди меня в моем Twitter 🐦

Добавить комментарий

Ваш адрес email не будет опубликован.