РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗jsnsPmRpFI 140 of 168 menu
◀ ▶

Запись по идентификатору в Nest

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

Метод findOneBy принимает объект с именами колонок. Для ключа достаточно поля id. Если совпадений нет, результат равен null - тогда сервис бросает NotFoundException. Номер из адреса прогоняют через ParseIntPipe, чтобы в метод пришло число.

Покажем на примере постов:

import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; @Entity() export class Post { @PrimaryGeneratedColumn() id: number; @Column() title: string; }

Сервис ищет строку по ключу и прерывает метод, если её нет:

import { Injectable, NotFoundException } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { Post } from '../post.entity.js'; @Injectable() export class PostService { constructor( @InjectRepository(Post) private postRepository: Repository<Post>, ) {} async getPost(id: number): Promise<Post> { const post = await this.postRepository.findOneBy({ id }); if (!post) { throw new NotFoundException('Post not found'); } return post; } }

Контроллер читает номер из адреса и отдаёт найденную запись:

import { Controller, Get, Param, ParseIntPipe } from '@nestjs/common'; import { PostService } from './post.service.js'; @Controller('posts') export class PostController { constructor(private postService: PostService) {} @Get(':id') getPost(@Param('id', ParseIntPipe) id: number) { return this.postService.getPost(id); } }

Модуль темы связывает сущность с сервисом и контроллером:

import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { Post } from '../post.entity.js'; import { PostController } from './post.controller.js'; import { PostService } from './post.service.js'; @Module({ imports: [TypeOrmModule.forFeature([Post])], controllers: [PostController], providers: [PostService], }) export class PostsModule {}

Корень настраивает PostgreSQL и подключает модуль постов:

import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { PostsModule } from './posts/posts.module.js'; @Module({ imports: [ TypeOrmModule.forRoot({ type: 'postgres', host: 'localhost', port: 5432, username: 'postgres', password: 'postgres', database: 'site', autoLoadEntities: true, synchronize: true, }), PostsModule, ], }) export class AppModule {}

Откройте работника по числовому номеру из адреса в WorkerController через WorkerService и репозиторий. При отсутствии строки отвечайте отказом «не найдено». Подключите WorkersModule к базе в корне.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить