Создание API для создания записи с использованием NestJS и Prisma
NestJS — это мощный фреймворк для создания серверных приложений, а Prisma — современный ORM для работы с базами данных. Вместе они позволяют быстро и эффективно создавать API. Вот пошаговое руководство для создания API с использованием этих технологий.
1. Установка зависимостей
Сначала создайте новый проект NestJS и установите Prisma:
bash
# Создание нового проекта NestJS
nest new my-nestjs-app
# Установка Prisma и клиента
npm install @prisma/client
npm install prisma --save-dev
Инициализируйте Prisma:
bash
npx prisma init
2. Настройка Prisma Schema
В файле prisma/schema.prisma
настройте модель данных. Например, создадим модель Post
:
prisma
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
npx prisma migrate dev --name init
3. Генерация Prisma Client
После настройки схемы выполните команду для генерации Prisma Client:
bash
npx prisma generate
4. Настройка Prisma в NestJS
Создайте модуль Prisma для интеграции с NestJS. Это позволит инкапсулировать логику работы с Prisma.
Создание Prisma модуля
Создайте файл src/prisma/prisma.module.ts
:
typescript
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
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
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
nest generate module posts
nest generate controller posts
nest generate service posts
Настройка PostsService
В файле src/posts/posts.service.ts
добавьте логику для создания записи:
typescript
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
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
npm run start
Отправьте POST-запрос на http://localhost:3000/posts
с телом:
json
{
"title": "Пример записи",
"content": "Это содержимое записи"
}
Вы получите ответ с созданной записью.
7. Дополнительно
- Вы можете добавить валидацию данных с помощью
class-validator
иclass-transformer
. - Для работы с другими базами данных (например, PostgreSQL) измените
provider
иurl
вschema.prisma
.
Теперь у вас есть API для создания записей с использованием NestJS и Prisma! 🚀