NextJS-Backend/Datenbank?
Ich habe eine Anwendung, wo sich ein Nutzer mit Auth0 registrieren kann.
Es zeigt den Namen und die E-Mail ganz normal an und mit
/api/auth/login
/api/auth/logout
kann man sich anmelden/abmelden.
Nun sollen alle Nutzer XP-Punkte haben (bei 0 starten) und durch Fragen beantworten im Level aufsteigen können. Bzw. ich möchte ganz simpel erst einmal mit einem Buttonklick 25 XP-Punkte dazu verdienen.
Das Ganze kriege ich normalerweise mit PHP und einer normalen SQL-Datenbank, die ich in phpMyAdmin einrichte, hin, aber da ich in NextJS neu bin, wollte ich wissen, wie das da abläuft.
Vercel liefert soweit ich weiß keine Datenbank, wo ich Nutzerdaten hinschicken kann und Auth0 kann auch nicht mehr, als nur ein sicheres Loginsystem bieten.
Also müsste ich die SQL-Datenbank wie immer anlegen und mit dem user-Objekt von Auth0 arbeiten und die "sid" benutzen, um die Punkte dem richtigen User zuzuschreiben?
Ich weiß, dass MongoDB beliebt ist, aber das ist doch auch wieder extern irgendwo und kostet Geld und ist nicht auf einem "Standard" Webhosting inklusive, wie PHP/SQL-Datenbank.
Wie benutzt man MongoDB und ist das sinnvoll?
Für Next brauche ich kein VPS, was praktisch ist. Keine zusätzlichen Kosten und lange Einrichtung. Dafür SSR.
NextJS ist auch selber das Backend soweit ich weiß, also ich kann direkt in der Serverkomponente eine Datenbankabfrage machen und mit Node etwas zu der Datenbank hinzufügen, wie das mit dem Klick +25 XP.
Von Firebase habe ich gehört, dass es beides kann: Sowohl sichere Authentication als auch Datenbank für Nutzerdaten.
Aber ob das bei wenigen Nutzern Geld kostet weiß ich nicht.
2 Antworten
(...) und Auth0 kann auch nicht mehr, als nur ein sicheres Loginsystem bieten.
In Auth0 können ebenso profilbezogene Daten (user_metadata) gespeichert werden.
Also müsste ich die SQL-Datenbank wie immer anlegen und (...)
Wenn du die Nutzerdaten in einer eigenen Datenbank ablegen möchtest: Ja. Eine Tabelle mit zwei Spalten dürfte ausreichen. Eine Spalte beinhaltet eine Nutzer-ID/E-Mail (= Primärschlüssel), die zweite die aktuellen Erfahrungspunkte.
Die sid von Auth0 wäre allerdings nicht als Nutzer-ID geeignet, denn die beschreibt die aktuelle Session-ID. Sie ist also nicht persistent, sondern ändert sich mit jeder neuen Authentifizierung. Nimm stattdessen die user_id oder (sofern die in deinem Fall eindeutig ist) die E-Mail-Adresse.
(...) Vercel liefert soweit ich weiß keine Datenbank, wo ich Nutzerdaten hinschicken kann (...)
Vercel bietet verschiedene Formen der Datenspeicherung. Das Angebot inkludiert eine Postgres-Datenbank, die du auch im Hobby-Plan nutzen kannst.
(...) aber da ich in NextJS neu bin, wollte ich wissen, wie das da abläuft.
Wie in PHP, kannst du auch mit unterschiedlichen DBMS kommunizieren. Schau auf NPM, dort findest du passende Client-Bibliotheken.
Zum Beispiel:
- mongodb (MongoDB)
- mysql2 (MySQL)
- pg (Postgres)
- prisma (ein ORM, welches Konnektoren zu verschiedenen DBMS bietet; bei Bedarf auch eine GUI zur Verwaltung der Datenbank > siehe Prisma Studio)
- sqlite3 (SQLite)
Wenn du explizit phpMyAdmin weiterverwenden möchtest, musst du es entsprechend einrichten (Webserver mit PHP-Konfiguration, phpMyAdmin installieren und konfigurieren). In einer Webhosting-Umgebung, in der die entsprechenden Zugriffsrechte fehlen, klappt das natürlich nicht so gut. Du könntest dir das alles auf dem eigenen Rechner einrichten und später einen Dump auf das gehostete System ziehen.
Ich weiß, dass MongoDB beliebt ist, aber das ist doch auch wieder extern irgendwo und kostet Geld und ist nicht auf einem "Standard" Webhosting inklusive, wie PHP/SQL-Datenbank.
- MongoDB ist frei/kostenlos nutzbar
- MongoDB kann selbst oder in einer Cloud gehostet werden
Lies dazu hier.
Node.js + MongoDB könntest du bei Heroku oder NodeChef hosten. Andernfalls eignen sich Cloud Hosting-Anbieter wie AWS, Azure, Digital Ocean, usw. ... oder du holst dir einen vServer (z.B. bei IONOS, netcup, Strato, o.ä.) und richtest dir auf dem alles Notwendige selbst ein. Das keine dieser Lösungen kostenlos ist, sollte verständlich sein.
Wie benutzt man MongoDB (...)?
Schau in die Dokumentation.
(...) und ist das sinnvoll?
Wir reden in deinem Fall von keiner komplexen oder außergewöhnlichen Struktur, die zur Verwaltung komplizierter Operationen (Joins, o.ä.) bedarf. Du hast nur eine einfache Liste an Schlüsselwertpaaren, die in beiden Datenbanksystemen problemlos abgebildet werden kann.
Worüber man sich wenn eher Gedanken machen müsste, wäre die Update-Strategie, wobei auch das erst wirklich relevant werden sollte, wenn permanent tausende Anfragen in der Minute bearbeitet werden müssen. Belies dich für so einen Fall zu Load Balancing/Skalierung und schau außerdem, ob du nicht schon über eine geänderte Programmlogik für Entlastung sorgen kannst.
Irgendwelche Highscore-Tabellen/Rankingsysteme, o.ä. berechnet man am besten über einen separaten Job in bestimmten Zeitintervallen (z.B. an jedem Tag um 1 Uhr).
Von Firebase habe ich gehört, (...)
Auch zu Firebase gibt es eine offizielle Dokumentation.
MongoDB reicht da völlig aus, da gibt es ja eine gratis Version mit gut 500MB Speicher, das reicht für so ein kleines Projekt komplett. Ist auch online in der Cloud gehosted, musst dir im Dashboard auf der Website die Daten anlegen.
Bei NextJS würdest du dich da einfach in einer helper-Datei verbinden, nachdem du die jeweiligen Models für die Daten erstellt hast und innerhalb des `/api` Ordners die API calls machst.