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

Схема параметра маршрута в Nest

Пусть в адресе страницы есть сегмент с номером записи, а клиент подставляет текст или дробное число. Метод ждёт целый идентификатор, и неверный сегмент ломает логику до проверки.

Схему числа вешают на параметр маршрута тем же каналом, что и на тело. Param получает второй аргумент с экземпляром канала и ссылкой на схему. После успеха метод работает уже с числом, а не со строкой из адреса.

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

import { BadRequestException, Injectable, PipeTransform } from '@nestjs/common'; @Injectable() export class SchemaPipe implements PipeTransform { constructor(private schema: { '~standard': { validate: (value: unknown) => Promise<{ value?: unknown; issues?: { message: string }[] }> | { value?: unknown; issues?: { message: string }[] } } }) {} async transform(value: unknown) { const result = await this.schema['~standard'].validate(value); if (result.issues) { throw new BadRequestException(result.issues[0].message); } return result.value; } }

Сегмент идентификатора опишем как целое положительное число:

import { z } from 'zod'; export const postIdSchema = z.coerce.number().int().positive();

На странице одной записи проверим сегмент адреса и вернём его клиенту:

import { Controller, Get, Param } from '@nestjs/common'; import { postIdSchema } from './post-id.schema.js'; import { SchemaPipe } from './schema.pipe.js'; @Controller('posts') export class PostController { @Get(':id') getPost(@Param('id', new SchemaPipe(postIdSchema)) id: number) { return String(id); } }

Подключим контроллер в корневом модуле:

import { Module } from '@nestjs/common'; import { PostController } from './post.controller.js'; @Module({ controllers: [PostController], }) export class AppModule {}

Сделайте страницу одного работника с проверкой числового сегмента адреса схемой через канал в контроллере WorkerController и подключите его к корневому модулю.

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