Interakcja z bazą danych PostgreSQL lub inną bazą danych bezpośrednio zwiększa ilość pisanego SQL. Może to spowodować problemy z bezpieczeństwem, takie jak ataki SQL injection, i ogranicza przenośność bazy danych. Wskazane jest użycie ORM (Object Relation Mapper), takiego jak Prisma, który zapewnia warstwę abstrakcji na wierzchu bazy danych.
Dowiedz się, jak używać Prisma w Next.js do łączenia się i interakcji z bazą danych PostgreSQL.
Tworzenie aplikacji Next.js
Przed utworzeniem aplikacji Next.js upewnij się, że masz Zainstalowano węzeł i npm w Twoim środowisku programistycznym.
Utwórz aplikację Next.js o nazwie prisma-next, uruchamiając to polecenie w swoim terminalu:
npx utwórz-następną-aplikację prisma-next
Spowoduje to utworzenie nowego katalogu o nazwie prisma-next z podstawowymi plikami na początek.
Przejdź do katalogu prisma-next i uruchom serwer programistyczny za pomocą tego polecenia:
npm uruchom dev
Spowoduje to uruchomienie serwera deweloperskiego w http://localhost: 3000.
Oto podstawowe kroki tworzenia nowej aplikacji Next.js. Możesz dowiedzieć się więcej o funkcjach Next.js, odwołując się do tego artykułu dlaczego warto przeprowadzić migrację do Next.js.
Instalacja klienta Prisma
Aby zacząć używać pryzma, będziesz potrzebować pakietów prisma i @prisma/client. prisma to narzędzie Prisma CLI, podczas gdy @prisma/client to automatycznie generowany konstruktor zapytań, który pomoże Ci przeszukiwać bazę danych.
Zainstaluj te dwa pakiety przez npm.
npm zainstaluj prisma @prisma/client
Następnie zainicjuj prisma, uruchamiając polecenie npx prisma init na terminalu.
npx prisma init
Spowoduje to wygenerowanie nowego pliku o nazwie schemat.prisma który zawiera schemat bazy danych i a .env plik, do którego dodasz adres URL połączenia z bazą danych.
Dodanie adresu URL połączenia
Potrzebujesz adresu URL połączenia, aby połączyć prisma z twoim Baza danych PostgreSQL. Ogólny format adresu URL połączenia jest następujący:
postgres://{nazwa_użytkownika}:{hasło}@{nazwa_hosta}:{port}/{nazwa_bazy_danych}
Zamień elementy w nawiasach klamrowych na dane własnej bazy danych, a następnie zapisz je w pliku .env:
DATABASE_URL = „Twoje parametry połączenia”
Następnie w schema.prisma określ adres URL połączenia z bazą danych:
baza danych źródła danych {
dostawca = "PostgreSQL"
url = env("URL_BAZY DANYCH")
}
Definiowanie schematu bazy danych
Schemat bazy danych to struktura definiująca model danych Twojej bazy danych. Określa tabele, kolumny i relacje między tabelami w bazie danych, a także wszelkie ograniczenia i indeksy, których baza danych powinna używać.
Aby utworzyć schemat dla bazy danych z tabelą użytkowników, otwórz plik schema.prisma i dodaj model użytkownika.
wzorowy użytkownik {
id Ciąg @default (cuid()) @id
imię Ciąg?
e-mail String @unique
}
Model User ma kolumnę id, która jest kluczem podstawowym, kolumnę name typu string oraz kolumnę e-mail, która powinna być unikalna.
Po zdefiniowaniu modelu danych należy wdrożyć schemat w bazie danych przy użyciu npx prisma dbnaciskać Komenda.
npx prisma db push
To polecenie tworzy rzeczywiste tabele w bazie danych.
Używanie Prismy w Next.js
Aby używać Prisma w Next.js, musisz utworzyć instancję klienta prisma.
Najpierw wygeneruj klienta Prisma.
generowanie npx prisma
Następnie utwórz nowy folder o nazwie lib i dodaj w nim nowy plik o nazwie prisma.js. W tym pliku dodaj następujący kod, aby utworzyć instancję klienta prisma.
import { PrismaClient} z"@prisma/klient";
pozwalać pryzmat;Jeśli (typokno"nieokreślony") {
Jeśli (proces.env. WĘZEŁ_ENV "produkcja") {
pryzmat = nowy PrismaClient();
} w przeciwnym razie {
Jeśli (!global.prisma) {
global.prisma = nowy PrismaClient();
}pryzmat = globalny.pryzma;
}
}
eksportdomyślny pryzmat;
Teraz możesz zaimportować klienta prisma jako „prisma” do swoich plików i rozpocząć wysyłanie zapytań do bazy danych.
Wysyłanie zapytań do bazy danych w trasie API Next.js
Prisma jest zwykle używana po stronie serwera, gdzie może bezpiecznie wchodzić w interakcje z bazą danych. W aplikacji Next.js możesz skonfigurować trasę API, która wykorzystuje Prisma do pobierania danych z bazy danych i zwracania ich klientowi. Strony lub komponenty mogą następnie pobierać dane z trasy API za pomocą pliku Biblioteka HTTP, taka jak Axios lub fetch.
Utwórz trasę API, otwierając folder pages/api i tworząc nowy podfolder o nazwie db. W tym folderze utwórz plik o nazwie utwórz użytkownika.js i dodaj następującą funkcję obsługi.
import pryzmat z"@/lib/prisma";
eksportdomyślnyasynchronicznyfunkcjonowaćtreser(żądanie, rez) {
konst { imię i nazwisko, adres e-mail } = żądanie.zapytanie;próbować {
konst nowyUżytkownik = czekać na pryzmat. Utwórz użytkownika ({
dane: {
nazwa,
e-mail,
},
});
res.json({ użytkownik: nowyUer, błąd: zero });
} złapać (błąd) {
res.json({ błąd: Komunikat o błędzie, użytkownik: zero });
}
}
Ta funkcja pobiera nazwę i adres e-mail z treści żądania. Następnie w bloku try/catch używa metody create dostarczonej przez Prisma Client, aby utworzyć nowego użytkownika. Funkcja zwraca obiekt JSON zawierający użytkownika i komunikat o błędzie, jeśli taki istnieje.
W jednym ze swoich komponentów możesz teraz wysłać żądanie do tej trasy API. Aby zademonstrować, utwórz nowy folder o nazwie profile w katalogu aplikacji i dodaj nowy plik o nazwie page.js. Następnie dodaj prosty formularz zawierający dwa pola wprowadzania nazwy i adresu e-mail oraz przycisk przesyłania.
W formularzu dodaj zdarzenie on-submit, które wywołuje funkcję o nazwie handleSubmit. Formularz powinien wyglądać tak:
„użyj klienta”;
import Reaguj, { stan użycia } z"reagować";eksportdomyślnyfunkcjonowaćStrona() {
konst [nazwa, nazwa zestawu] = useState("");
konst [email, setemail] = useState("");konst uchwyt Prześlij = asynchroniczny (e) => {
e.preventDefault();
};powrót (
typ={tekst}
symbol zastępczy=„Dodaj adres e-mail”
wartość={e-mail}
onChange={setemail((mi) => e.wartość docelowa)}
/>
W funkcji handleSubmit użyj metody fetch, aby wysłać żądanie do trasy /api/db/createuser.
konst uchwyt Prześlij = asynchroniczny (e) => {
e.preventDefault();
konst użytkownik = czekać na aportować("/api/baza danych/utwórzużytkownika", {
Typ zawartości: "aplikacja/json",
ciało: JSON.stringify({imię i nazwisko, adres e-mail}),
});
};
Teraz, po przesłaniu formularza, Prisma utworzy nowy rekord użytkownika w tabeli User.
Zrób więcej z Prisma
Możesz użyć Prisma do łączenia się i wysyłania zapytań do bazy danych PostgreSQL z aplikacji Next.js.
Oprócz dodawania nowych rekordów do bazy danych, możesz także uruchamiać inne polecenia SQL. Na przykład możesz usuwać wiersze, wybierać wiersze na podstawie określonych warunków, a nawet aktualizować istniejące dane przechowywane w bazie danych.