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

Апрацоўка DELETE запыту ў NextJS

Для выдалення даных трэба выкарыстоўваць апрацоўшчыкі для DELETE запыту.

Давайце зробім так, каб пры пераходзе па адрасе users/delete/1, з'явілася форма, па націсканні на кнопку якой будзе выдалены з масіву першы юзер.

Спачатку ствараем папку users/[id]/delete, усярэдзіне якой размясцім файл page.jsx. А файл з апрацоўшчыкам роўта для пазбягання канфлікту размясцім у папцы users/[id]/delete/api.

Пропісваем у users/[id]/update/page.jsx дырэктыву 'use client і імпартуем хукі useState, useEffect і useParams. Далей экспартуем функцыю DeleteUserPage. У зменную handleSubmit запішам асінхронную стрэлачную функцыю. Яна будзе працаваць з элементамі формы і будзе захоўваць нават пры перазагрузцы старонкі. Сваім вынікам функцыя таксама будзе вяртаць форму з інпутам. Па націсканні на кнопку будзе выконвацца DELETE запыт:

'use client'; import { useState, useEffect } from 'react'; import { useParams } from 'next/navigation'; export default function DeleteUserPage() { const [name, setName] = useState(''); const [responseMessage, setResponseMessage] = useState(''); const { id } = useParams(); useEffect(() => { const fetchUser = async () => { try { const response = await fetch(`/users/delete/${id}/api`); if (response.ok) { const user = await response.json(); setName(user.name); } else { throw new Error('Error fetching user'); } } catch (error) { setResponseMessage('Error fetching user'); } }; fetchUser(); }, [id]); const handleDelete = async (e: React.FormEvent<HTMLFormElement>) => { e.preventDefault(); try { const response = await fetch(`/users/delete/${id}/api`, { method: 'DELETE', headers: { 'Content-Type': 'application/json', }, }); if (!response.ok) { throw new Error('Error deleting user'); } setResponseMessage(`User with ID: ${id} deleted!`); } catch (error) { setResponseMessage('Error deleting user'); } }; return ( <div> <h1>Delete User</h1> <form onSubmit={handleDelete}> <input value={name} readOnly required /> <button type="submit">Delete User</button> </form> {responseMessage && <p>{responseMessage}</p>} </div> ); }

Цяпер пераходзім да роўту users/[id]/delete/api/route.js. Імпартуем у яго зменную users з файла users/data.js. Каб рэндарыць форму на старонцы браўзера аб'яўляем асінхронную функцыю для апрацоўкі GET запыту. Задаем для дынамічнай параметра id радковы тып даных. У зменную userId запішам вынік пераўтварэння радка id у лік. А зменная user будзе захоўваць інфармацыю аб юзеры, id якога супадае з параметрам, зададзеным у маршруце. Таксама зададзім умову, якая будзе выдаваць памылку, калі юзер з зададзеным id не будзе знойдзены:

import { users } from "../../../data"; // апрацоўка GET запыту для атрымання даных карыстальніка: export async function GET(_request: Request, { params }: { params: { id: string } }) { const userId = parseInt(params.id, 10); const user = users.find(user => user.id === userId); if (!user) { return new Response(JSON.stringify({ message: 'User not found' }), { headers: { 'Content-Type': 'application/json' }, status: 404, }); } return new Response(JSON.stringify(user), { headers: { 'Content-Type': 'application/json' }, status: 200, }); } }

Цяпер давайце апішам функцыю для апрацоўкі DELETE запыту. Ёй таксама будзе перададзены дынамічны параметр id радковага тыпу. у зменнай userId пераўтворым id у лік. Далей атрымліваем цела запыту, у нашым выпадку гэта будзе імя, і запісваем яго ў зменную body. Далей з дапамогай стрэлачнай функцыі знаходзім у масіве users індэкс юзера з зададзеным у параметры маршруту id і запісваем вынік у зменную userIndex. Таксама пропішам умову, якая будзе выдаваць памылку, у выпадку, калі юзер не будзе знойдзены. Знойдзенага юзера выдаляем з масіву з дапамогай метаду splice. І затым вяртаем абноўлены аб'ект карыстальніка:

export async function DELETE(_request: Request, { params }: { params: { id: string } }) { const userId = parseInt(params.id); const userIndex = users.findIndex(user => user.id === userId); if (userIndex === -1) { return new Response(JSON.stringify({ message: 'User not found' }), { headers: { 'Content-Type': 'application/json' }, status: 404, }); } // Выдаленне карыстальніка users.splice(userIndex, 1); return new Response(JSON.stringify({ message: `User ${userId} deleted` }), { headers: { 'Content-Type': 'application/json' }, status: 200, });

Рэалізуйце выдаленне горада апісаным у ўроке спосабам.

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