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

Обновление записи в Nest

Клиент присылает новые значения полей, а строка в базе остаётся прежней. Без шага обновления таблицы правка не дойдёт до PostgreSQL.

Метод update меняет колонки по условию ключа, затем удобно снова прочитать строку через findOneBy. Если записи нет, сервис бросает NotFoundException. Номер из адреса приводят к числу через ParseIntPipe.

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

import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; @Entity() export class Post { @PrimaryGeneratedColumn() id: number; @Column() title: string; @Column() text: 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 updatePost( id: number, data: { title: string; text: string }, ): Promise<Post> { await this.postRepository.update(id, data); const post = await this.postRepository.findOneBy({ id }); if (!post) { throw new NotFoundException('Post not found'); } return post; } }

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

import { Body, Controller, Param, ParseIntPipe, Patch, } from '@nestjs/common'; import { PostService } from './post.service.js'; @Controller('posts') export class PostController { constructor(private postService: PostService) {} @Patch(':id') updatePost( @Param('id', ParseIntPipe) id: number, @Body() body: { title: string; text: string }, ) { return this.postService.updatePost(id, body); } }

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

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 {}

Корневой модуль настраивает базу и импортирует модуль постов:

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 {}

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

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