Создание API для создания записи с использованием NestJS и Prisma

Создание API для создания записи с использованием NestJS и Prisma

NestJS — это мощный фреймворк для создания серверных приложений, а Prisma — современный ORM для работы с базами данных. Вместе они позволяют быстро и эффективно создавать API. Вот пошаговое руководство для создания API с использованием этих технологий.


1. Установка зависимостей

Сначала создайте новый проект NestJS и установите Prisma:

bash

1
2
3
4
5
6
# Создание нового проекта NestJS
nest new my-nestjs-app
 
# Установка Prisma и клиента
npm install @prisma/client
npm install prisma --save-dev

Инициализируйте Prisma:

bash

1
npx prisma init

2. Настройка Prisma Schema

В файле prisma/schema.prisma настройте модель данных. Например, создадим модель Post:

prisma

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
generator client {
  provider = "prisma-client-js"
}
 
datasource db {
  provider = "sqlite" // Или другой провайдер, например, PostgreSQL
  url      = "file:./dev.db"
}
 
model Post {
  id        Int      @id @default(autoincrement())
  title     String
  content   String
  createdAt DateTime @default(now())
}

После этого выполните миграцию для создания таблицы в базе данных:

bash

1
npx prisma migrate dev --name init

3. Генерация Prisma Client

После настройки схемы выполните команду для генерации Prisma Client:

bash

1
npx prisma generate

4. Настройка Prisma в NestJS

Создайте модуль Prisma для интеграции с NestJS. Это позволит инкапсулировать логику работы с Prisma.

Создание Prisma модуля

Создайте файл src/prisma/prisma.module.ts:

typescript

1
2
3
4
5
6
7
8
9
import { Global, Module } from '@nestjs/common';
import { PrismaService } from './prisma.service';
 
@Global()
@Module({
  providers: [PrismaService],
  exports: [PrismaService],
})
export class PrismaModule {}

Создайте файл src/prisma/prisma.service.ts:

typescript

1
2
3
4
5
6
7
8
9
10
11
12
13
import { Injectable, OnModuleDestroy, OnModuleInit } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';
 
@Injectable()
export class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy {
  async onModuleInit() {
    await this.$connect();
  }
 
  async onModuleDestroy() {
    await this.$disconnect();
  }
}

Добавьте модуль Prisma в AppModule:

typescript

1
2
3
4
5
6
7
8
import { Module } from '@nestjs/common';
import { PrismaModule } from './prisma/prisma.module';
import { PostsModule } from './posts/posts.module';
 
@Module({
  imports: [PrismaModule, PostsModule],
})
export class AppModule {}

5. Создание модуля для работы с записями

Сгенерируйте модуль и контроллер для работы с записями:

bash

1
2
3
nest generate module posts
nest generate controller posts
nest generate service posts

Настройка PostsService

В файле src/posts/posts.service.ts добавьте логику для создания записи:

typescript

1
2
3
4
5
6
7
8
9
10
11
12
13
import { Injectable } from '@nestjs/common';
import { PrismaService } from '../prisma/prisma.service';
 
@Injectable()
export class PostsService {
  constructor(private readonly prisma: PrismaService) {}
 
  async createPost(data: { title: string; content: string }) {
    return this.prisma.post.create({
      data,
    });
  }
}

Настройка PostsController

В файле src/posts/posts.controller.ts настройте маршрут для создания записи:

typescript

1
2
3
4
5
6
7
8
9
10
11
12
import { Body, Controller, Post } from '@nestjs/common';
import { PostsService } from './posts.service';
 
@Controller('posts')
export class PostsController {
  constructor(private readonly postsService: PostsService) {}
 
  @Post()
  async createPost(@Body() body: { title: string; content: string }) {
    return this.postsService.createPost(body);
  }
}

6. Тестирование API

Запустите сервер:

bash

1
npm run start

Отправьте POST-запрос на http://localhost:3000/posts с телом:

json

1
2
3
4
{
  "title": "Пример записи",
  "content": "Это содержимое записи"
}

Вы получите ответ с созданной записью.


7. Дополнительно

  • Вы можете добавить валидацию данных с помощью class-validator и class-transformer.
  • Для работы с другими базами данных (например, PostgreSQL) измените provider и url в schema.prisma.

Теперь у вас есть API для создания записей с использованием NestJS и Prisma! 🚀