Błąd nieprawidłowego parametru w NextJS
W poprzednich lekcjach zwracaliśmy
błąd 404 w przypadku,
gdy trasa dla danego URL
nie została znaleziona. Jednakże, w przypadku
trasy dynamicznej może zaistnieć
taka sytuacja, gdy trasa istnieje,
ale wartość parametru jest nieprawidłowa.
Spójrzmy na przykład.
Załóżmy, że mamy trasę następującego rodzaju:
/user/:id.
Załóżmy również, że mamy obiekt z użytkownikami:
let users = {
1: 'user1',
2: 'user2',
3: 'user3',
4: 'user4',
5: 'user5',
};
Załóżmy, że chcemy wyświetlać użytkownika po jego identyfikatorze:
export default function User({ params }) {
return <p>
{ users[params.id] }
</p>;
}
Oczywiste jest, że identyfikator w URL może być
nie dowolny, a tylko jednym z kluczy
naszego obiektu. Próba odwołania się
pod nieistniejący adres
/user/6 powinna prowadzić
do tego, że zostanie zwrócony
błąd. Poprawmy
kod naszego komponentu i wyświetlmy
tekst z błędem:
export default function User({ params }) {
if (users[params.id]) {
return <p>
{ users[params.id] }
</p>;
} else {
return <p>
user not found
</p>;
}
}
To jednak nie wystarczy.
W końcu w tym przypadku odwołujemy się
do nieistniejącej strony,
a zatem powinniśmy zwrócić status HTTP 404.
Robimy to za pomocą
specjalnej funkcji notFound,
wbudowanej w NextJS.
Zaimportujmy tę funkcję:
import { notFound } from 'next/navigation';
A teraz będziemy ją wywoływać w przypadku, gdy wartość parametru jest nieprawidłowa:
export default function User({ params }) {
if (users[params.id]) {
return <p>
{ users[params.id] }
</p>;
} else {
return notFound();
}
}
Pełny kod naszego komponentu będzie wyglądał następująco:
import { notFound } from 'next/navigation';
let users = {
1: 'user1',
2: 'user2',
3: 'user3',
4: 'user4',
5: 'user5',
};
export default function User({ params }) {
if (users[params.id]) {
return <p>
{ users[params.id] }
</p>;
} else {
return notFound();
}
}
Rozwiąż opisaną problematykę w swoich komponentach.