Bei der Entwicklung moderner Web-Anwendungen spielt Express.js eine zentrale Rolle. Neben der Vermittlung von Basiswissen in diesem Thema, deckt dieser Kurs auch effizientes Programmieren mit Express JS Middleware ab. Ebenfalls wird fundiertes Wissen zur API Erstellung mit Express.js geliefert. Das Verstehen und Anwenden des Express JS Routers wird ebenso beleuchtet wie konkrete Techniken zur Leistungsoptimierung. Letztendlich soll dieses Wissen dazu beitragen, die Vorteile und Möglichkeiten von Express.js optimal nutzen zu können.
Entdecke über 50 Millionen kostenlose Lernmaterialien in unserer App.
Lerne mit deinen Freunden und bleibe auf dem richtigen Kurs mit deinen persönlichen Lernstatistiken
Jetzt kostenlos anmeldenNie wieder prokastinieren mit unseren Lernerinnerungen.
Jetzt kostenlos anmeldenBei der Entwicklung moderner Web-Anwendungen spielt Express.js eine zentrale Rolle. Neben der Vermittlung von Basiswissen in diesem Thema, deckt dieser Kurs auch effizientes Programmieren mit Express JS Middleware ab. Ebenfalls wird fundiertes Wissen zur API Erstellung mit Express.js geliefert. Das Verstehen und Anwenden des Express JS Routers wird ebenso beleuchtet wie konkrete Techniken zur Leistungsoptimierung. Letztendlich soll dieses Wissen dazu beitragen, die Vorteile und Möglichkeiten von Express.js optimal nutzen zu können.
Wenn du das Gebiet der modernen Webentwicklung betrittst, wirst du unvermeidlich auf ein mächtiges Tool namens Express.js stoßen. Als Teil des leistungsstarken MEAN (MongoDB, Express.js, AngularJS, Node.js) oder MERN (MongoDB, Express.js, React, Node.js) Stacks ist Express.js bei Webentwicklern auf der ganzen Welt beliebt. Aber was ist Express.js genau? Lasst uns gemeinsam in die Materie eintauchen.
Express.js, oft einfach als Express bezeichnet, ist ein leistungsfähiges und flexibles Framework für Node.js, welches für die Verwaltung der Datenpräsentation auf der Serverseite zuständig ist. Es ist vollständig in JavaScript geschrieben, was es besonders nutzerfreundlich und leicht zu erlernen macht.
Express.js bietet dir eine einfache und effektive Methode zur Erstellung von Webanwendungen und APIs. Es ermöglicht dir, Routen zu definieren, Daten zu empfangen und zu senden sowie Middleware zu verwenden, um Anfragen zu verarbeiten, bevor sie an ihren Endpunkt gelangen.
Mit seiner Fähigkeit, sowohl statische als auch dynamische Webseiten zu hosten, und seiner umfangreichen Bibliothek mit Middleware-Funktionen, birgt Express.js tiefergehende Facetten, die Webentwickler meistern können. Die Middleware Funktionen in Express js umfassen beispielsweise das Parsen der eingehenden Anfragen, die Bereitstellung von statischen Dateien oder das Logging von Anfragen.
Express.js hat eine Vielzahl von Anwendungsmöglichkeiten im Bereich der Webentwicklung. Hier sind einige praktische Beispiele, wie du Express js nutzen kannst:
Ein gutes praktisches Beispiel ist die Erstellung eines einfachen Restful API Servers mit Express.js. Hier ist der dazu gehörige Code:
const express = require('express') const app = express() const port = 3000 app.get('/', (req, res) => { res.send('Hello World!') }) app.listen(port, () => { console.log(`Example app listening at http://localhost:${port}`) })
Bevor wir in die technischen Aspekte von Express.js einsteigen, ist es wichtig zu verstehen, dass Express.js auf Node.js aufgebaut ist. Node.js ist eine Open-Source-Plattform für serverseitiges JavaScript, die auf Chrome's V8 JavaScript-Engine läuft und es ermöglicht, JavaScript außerhalb des Browsers in einer serverseitigen Umgebung auszuführen.
Du möchtest wissen, wie Express.js funktioniert? Es beginnt alles mit einem HTTP-Request, z. B. GET, POST, DELETE oder anderen Methoden. Wenn eine Anfrage an den Server gesendet wird, wird diese durch verschiedene Middleware-Funktionen geroutet, die du definiert hast, bevor sie schließlich zum finalen Handler gelangt.
In diesem Kontext bezieht sich Middleware auf Funktionen, die Zugriff auf das Request-Objekt (req), das Response-Objekt (res) und die nächste Funktion im Anforderungs-Response-Zyklus der Anwendung, dargestellt durch next().
Die Middleware-Funktionen in Express.js können nützlich sein, um Anfragen zu authentifizieren, zu parsen oder zu loggen, bevor sie schließlich zum Endpunkt gelangen. Bei Bedarf können mehrere Middleware-Funktionen für eine bestimmte Route definiert werden oder sogar global für alle Routen.
Ein anschauliches Beispiel für Middleware in Express.js könnte ein Logger sein, der bei jeder Anfrage, die an den Server gesendet wird, eine Nachricht ausgibt:
var express = require('express') var app = express() var myLogger = function (req, res, next) { console.log('LOGGED') next() } app.use(myLogger) app.get('/', function (req, res) { res.send('Hello World!') }) app.listen(3000)
Effizientes Programmieren ist ein wesentlicher Aspekt der modernen Web-Entwicklung. Wenn du Tools wie Express.js verwendest, ist der Schlüssel dazu oft die richtige Anwendung von Middleware. Mit Middleware-Komponenten kannst du Anfragen und Antworten manipulieren und erweitern, und sie sogar verwenden, um sicherzustellen, dass Benutzer ordnungsgemäß authentifiziert sind.
Express.js Middleware sind Funktionen, die eingehende Anfragen manipulieren und verarbeiten, bevor sie an nachfolgende Routen oder Middleware weitergeleitet werden. Sie sind das Herzstück der Express.js Anwendung und eine der Schlüsselkonzepte, um die Effizienz und Leistungsfähigkeit zu erhöhen.
Zu verstehen, wie Express.js Middleware funktioniert, ist entscheidend für die Entwicklung von leistungsfähigen Webanwendungen. Middleware-Funktionen reagieren auf HTTP-Anforderungen und können dazu verwendet werden, Code zu modularisieren, Fehler zu verwalten, Anfragen zu authentifizieren, Routing durchzuführen und vieles mehr.
Hierzulande gibt es eine Vielzahl von Middleware-Komponenten zur Verfügung, von denen viele von der Community entwickelt wurden. Einige wichtige und häufig verwendete Express.js Middleware sind:
Mit der richtigen Verwendung von Middleware-Funktionen kannst du komplizierte Aufgaben in kleinere, überschaubarere Teile zerlegen und diese in deiner Express.js Anwendung wiederverwenden.
Die Leistungsfähigkeit deiner Anwendung kann erheblich verbessert werden, indem du die Fähigkeiten der Express.js Middleware optimal nutzt. Hier ein paar Tipps:
Darüber hinaus gibt es spezielle Middleware-Komponenten wie "compression" und "helmet", die der Leistung deiner Anwendung einen zusätzlichen Schub geben können. Erstere verbessert die Seitenladezeiten durch Kompression von HTTP-Antworten, während letztere Sicherheitslücken schließt, die in Express.js Anwendungen entstehen können.
Hier ist ein Beispiel, wie du Middleware-funktion für Fehlerbehandlung verwenden kannst:
var express = require('express') var app = express() // Middleware function to handle errors var errorHandler = function (err, req, res, next) { console.error(err.message) res.status(500).send('Something broke!') } app.use(errorHandler) app.listen(3000)
In diesem Beispiel wird eine Fehlerbehandlungsfunktion definiert, die Fehler an den Client sendet und sie in der Konsole anzeigt.
Beim Lernen von Express.js Middleware hilft es, konkrete Beispiele zu betrachten. Unten findest du einige ausgewählte Beispiele für gängige Aufgaben, die mithilfe von Middleware ausgeführt werden können.
Hier ist ein einfaches Anwendungsbeispiel von Middleware, um Authentifizierung zu handhaben:
var express = require('express') var app = express() var authenticate = function (req, res, next) { if (req.headers.authorization) { next() } else { res.status(401).send('Unauthorized') } } app.use(authenticate) app.get('/', function (req, res) { res.send('Welcome!') }) app.listen(3000)
Diese Middleware-Funktion überprüft, ob die Anfrage ein "Authorization" Header hat. Wenn ja, wird die Kontrolle an die nächste Funktion weitergegeben (in diesem Fall die Route-Handlerfunktion). Wenn nicht, wird eine 401 ("Unauthorized") Antwort gesendet.
Dies sind nur ein paar Beispiele dafür, wie du Middleware nutzen kannst, um Anfragen zu verarbeiten, zu modifizieren und zu handhaben. Die Möglichkeiten sind nur durch deine Anforderungen und Vorstellungskraft begrenzt.
Mit dem Verständnis von Express.js Middleware bist du besser ausgerüstet, um leistungsstarke, effiziente und robuste Webanwendungen zu entwickeln. Also, lasst uns in die faszinierende Welt der Middleware eintauchen und Express.js auf eine neue und verbesserte Art und Weise erleben.
Wenn du über Webentwicklung sprichst, gehört der Bau von APIs (Application Programming Interfaces) zu den grundlegenden Fähigkeiten, die du beherrschen solltest. Express.js, das auf Node.js basiert, ist ein hervorragendes Werkzeug zum Erstellen von APIs. Durch seine Leichtigkeit und Flexibilität hast du die Möglichkeit, sowohl einfache als auch komplexe APIs zu kreieren. Lassen uns nun tiefer in das Thema der API-Erstellung mit Express.js eintauchen.
Mit Express.js kannst du auf einfache und schnelle Weise eine Restful-API erstellen. Die Schritte zur Erstellung einer API mit Express.js könnten folgendermaßen aussehen:
Eine Restful-API (Representational State Transfer) ist ein softwarearchitektonischer Stil, der einen Ansatz für die Kommunikation zwischen Client und Server definiert. Hierbei wird ein Satz von Regeln festgelegt, die besagen, wie Server zu Anfragen von Clients reagieren sollen.
Stellen wir uns vor, du möchtest eine einfache API mit einer GET-Route erstellen, die ein "Hello, World!" ausgibt, wenn sie aufgerufen wird. Dein Code könnte so aussehen:
const express = require('express') const app = express() const port = 3000 app.get('/', (req, res) => { res.send('Hello, World!') }) app.listen(port, () => { console.log(`App listening at http://localhost:${port}`) })
Dieser Code startet einen Server auf Port 3000 und definiert eine Route, die auf GET-Anforderungen reagiert und "Hello, World!" ausgibt.
TypeScript ist eine auf Typen basierende Superset-Sprache von JavaScript, die dir zusätzliche Funktionen wie Typen-Annotationen und -Prüfungen bietet. Wenn du TypeScript in deinem Express.js-Projekt verwendest, kannst du stärkere statische Typen und objektorientierte Programmierungsmerkmale verwenden, was zu einem robusteren Code und einer verbesserten Autovervollständigung und Navigation im Code beiträgt.
TypeScript ist eine streng getypte, objektorientierte Kompilierungserweiterung für JavaScript. TypeScript ergänzt JavaScript um optionale statische Typisierungen und klassenbasierte objektorientierte Programmierung.
Die Verwendung von TypeScript mit Express.js erfordert den TypeScript-Compiler, das TypeScript-Konfigurationsfile (tsconfig.json) und die Typdefinitionen für Node.js und Express.js, die du mit npm installieren kannst. Danach kannst du TypeScript-Dateien (.ts) anstelle von JavaScript-Dateien (.js) in deinem Projekt verwenden.
Hier ist ein Beispiel, wie du TypeScript zusammen mit Express.js verwenden könntest, um deine Route zu definieren:
import express from 'express'; const app = express(); const port = 3000; app.get('/', (req: express.Request, res: express.Response) => { res.send('Hello, World!'); }); app.listen(port, () => { console.log(`App listening at http://localhost:${port}`); });
In diesem Beispiel beachte, dass die Anforderungs- und Antwortobjekte explizit mit ihren Typen annotiert sind, was die Lesbarkeit und Robustheit des Codes verbessert.
Die Verwendung von Express.js zur Erstellung von APIs bringt viele Vorteile mit sich. Grundsätzlich macht die Einfachheit und Leichtigkeit von Express.js es zu einer hervorragenden Wahl für schnelle API-Entwicklung.
Vorteile | Nachteile |
---|---|
Lightgewichtig und flexibel | Eine abstrakte Ebene über Node.js, welche evtl. Leistungseinbüße mit sich bringt |
Einfache Integration mit Datenbanken und andere Tools | Für große, komplexe Anwendungen gibt es möglicherweise bessere Optionen, wie z. B. Django oder Ruby on Rails |
Effizientes Routing und Middleware | Erfordert Kenntnis und Verständnis von JavaScript und Node.js |
Große Gemeinschaft und jede Menge Unterstützung | Keine eingebaute Struktur, was zu unordentlichem Code führen kann, wenn nicht ordentlich organisiert |
Gleichzeitig sind nicht alle Anwendungsfälle gleich und je nach Anwendungsfall und Anwendungskomplexität kann es auch Nachteile geben. Trotz seiner Flexibilität und Benutzerfreundlichkeit, kann Express.js weniger geeignet sein für sehr große, komplexe Anwendungen, wo Frameworks mit eingebauten Strukturen und abstrakteren Abstraktionsebenen die bessere Wahl sein könnten.
Unabhängig davon, ob du Express.js für deine API-Erstellung in Betracht ziehst, ist es wichtig, die Vor- und Nachteile abzuwägen und verschiedene Optionen zu kennen. Wichtig ist, dass du den richtigen Werkzeugsatz für dein Anwendungsfall und deine Anforderungen auswählst.
Wenn du mit Webentwicklung und insbesondere mit Node.js arbeitest, ist dir eventuell der Ausdruck "Routing" begegnet. In Express.js, einer Node.js Framework, stellt das Router-Objekt eine wichtige Komponente für die effiziente Verwaltung von Anfragen an deine Anwendung dar. Es ermöglicht dir, verschiedene Routen und deren Handhabung auf einfache und übersichtliche Weise zu definieren.
Express.js Router ist ein Objekt bzw. eine Funktion, die durch Aufrufen der Express.Router() Funktion erzeugt wird. Es ist im Grunde ein Middleware, das Anfragen an bestimmte Endpunkte erhält und an die entsprechenden Handler weiterleitet. Router bieten auch andere Vorteile und Funktionen wie das Hinzufügen von Middleware für spezifische Pfade und das Trennen von Routen in verschiedene Dateien, um den Code sauber und gut wartbar zu halten.
Besonders in größeren Anwendungen können viele verschiedene Routen erforderlich sein, und da kommt der Express.js Router zum Einsatz. Es ermöglicht dir, Routen zu gruppieren und zu isolieren, was nicht nur den Code sauberer und leichter zu verwalten macht, sondern auch die Leistung deiner Anwendung verbessern kann.
Router in Express.js sind insofern leistungsfähig, als sie sowohl auf der Anwendungsebene als auch auf der Routerebene Middleware anbringen können, was es einfacher macht, Code zu strukturieren und zu organisieren. Mit Express.js Routers kannst du auch Parameter in URLs erfassen, was bei der Erstellung dynamischer Webanwendungen äußerst nützlich ist.
Zur Demonstration, wie du Express.js Router in deiner Anwendung verwenden kannst, sehen wir uns einige Beispiele an.
Betrachten wir zunächst ein einfaches Beispiel, bei dem wir ein Router-Objekt erstellen und es verwenden, um GET-Anfragen an die Route '/example' zu behandeln:
var express = require('express'); var router = express.Router(); router.get('/example', function(req, res) { res.send('Hello from EXAMPLE route!'); }); module.exports = router;
In diesem Snippet definieren wir einen Router mit einer einzelnen Route ('/example'). Wenn eine GET-Anfrage an '/example' gestellt wird, sendet der Server eine Begrüßungsnachricht zurück.
Außerdem ist ein weiterer Vorteil des Express.js Routers, dass du einen Router für einen bestimmten Pfad erstellen und dann weitere Sub-Pfade oder Routen innerhalb dieses Routers definieren kannst.
Schauen wir uns an, wie das in der Praxis aussehen könnte:
var express = require('express'); var router = express.Router(); router.get('/', function(req, res) { res.send('Hello from BASE route!'); }); router.get('/sub', function(req, res) { res.send('Hello from SUB route!'); }); module.exports = router;
In diesem Beispiel definieren wir zunächst eine Basisroute, die beim Aufruf "Hello from BASE route!" zurückgibt. Danach definieren wir eine weitere Subroute ('/sub'), die "Hello from SUB route!" ausgibt, wenn sie aufgerufen wird.
Der Einsatz von Express.js Router bietet viele Vorteile, hat aber auch einige Nachteile, abhängig von den spezifischen Anforderungen des Projekts.
Vorteile | Nachteile |
- Macht die Strukturierung von Anfragen und Verweisen einfacher und geordneter. | - Erfordert zusätzliche Einrichtung und Verständnis im Vergleich zur Verwendung nur von app.get(), app.post(), etc. |
- Verbessert die Lesbarkeit und Wartung des Codes durch Trennen von Funktionalitäten. | - Kann komplizierter sein für sehr einfache oder kleine Anwendungen, wo es nicht notwendig sein könnte. |
- Erlaubt die Verwendung von Middleware auf Routerebene. | - Express.js Router sind spezifisch für Express.js; Kenntnisse darüber sind nicht unbedingt auf andere Node.js Frameworks übertragbar. |
Trotz ihrer Stärken können Express.js Router in bestimmten Anwendungsfällen weniger optimal sein. Beispielsweise können sie für sehr einfache Anwendungen, in denen nur eine oder zwei Routen erforderlich sind, als unnötig erachtet werden. In diesen Fällen könnten die eingebauten app.get(), app.post() usw. Methoden ausreichend sein.
Auf der anderen Seite ist bei komplexeren Anwendungen, wo es eine große Anzahl von Routen gibt, oder wo Middleware spezifisch auf bestimmte Gruppen von Routen angewendet werden muss, die Nutzung von Express.js Routers fast unverzichtbar.
Express.js ist eines der am häufigsten verwendeten Webapplication Frameworks für Node.js. Es bietet eine Vielzahl von Funktionen, die es zu einer guten Wahl für schnelle und effiziente Webentwicklung machen. Von der einfachen und flexiblen Routenverwaltung über eingebaute Middleware-Funktionen bis hin zu leistungsfähigen Tools zur Leistungsoptimierung bietet Express.js viele Möglichkeiten, um eine effiziente und skalierbare Webanwendung zu erstellen.
Leistungsoptimierung bezieht sich auf das Anpassen und Optimieren einer Anwendung, um deren Leistung und Reaktionszeit zu verbessern. Unter der Haube verwendet Express.js HTTP/1.1 oder HTTP/2, gebündelte HTTP-Dienstprogramme und Middleware, um einen robusten Mechanismus zur Verbesserung der Leistung und Reaktionszeit deiner Webanwendung zu erzeugen.
Express.js bietet verschiedene technische Ansätze zur Leistungsverbesserung, unter anderem durch:
Es ist wichtig zu erwähnen, dass Leistungsoptimierung in Express.js nicht nur auf serverseitige Verbesserungen beschränkt ist. Express.js ermöglicht es dir auch, Optimierungen auf der Client-Seite durchzuführen, indem es die Übertragung von statischen Dateien und die Verwendung von Template-Motoren für serverseitiges Rendering unterstützt.
Express.js bietet eine Vielzahl von Techniken zur Verbesserung der Leistung deiner Anwendung. Diese Methoden reichen von der Optimierung des Routings über das Caching bis hin zur Komprimierung von Anfragen.
Das Routing in Express.js ist sehr effizient und kann mit Hilfe des Router-Objekts weiter optimiert werden. Das Caching, eine andere wichtige Technik zur Leistungsverbesserung in Express.js, kann auf verschiedene Weise durchgeführt werden, beispielsweise durch das Caching von statischen Dateien, das Caching von Datenbankabfragen oder sogar das Caching von HTTP-Antworten. Die Kompression, eine weitere wichtige Optimierungstechnik, kann in Express.js einfach durch Hinzufügen von Middleware, wie die Kompression-Middleware, erreicht werden.
Lassen uns ein Beispiel ansehen, wie die Kompressions-Middleware in Express.js verwendet werden kann:
var compression = require('compression') var express = require('express') var app = express() // compress all responses app.use(compression())
In diesem Code-Snippet wird die Kompression-Middleware für alle Routen und Anfragen auf dem Server verwendet.
Während Express.js viele Techniken und Tools zur Leistungsverbesserung bietet, hat es auch einige Nachteile, die du kennen musst.
Vorteile | Nachteile |
- Einfach zu verwenden und sehr flexibel | - Weniger geeignet für groß angelegte, komplexe Anwendungen |
- Bietet viele Tools zur Performance-Optimierung | - Erfordert umfassendes Wissen über Node.js und Middleware |
- Sicher und stabil | - Kein eingebautes ORM für die Datenbankarbeit |
Abschließend ist zu betonen, dass trotz der möglichen Nachteile die Hohe Performance und die vielen Optimierungs- und Anpassungsmöglichkeiten Express.js zu einer ausgezeichneten Wahl für viele Webanwendungen machen. Durch seine einfache Einrichtung und die schnelle Entwicklung eignet es sich bestens für kleine bis mittelgroße Projekte, während sein Modulsystem und seine Flexibilität es in Kombination mit anderen Bibliotheken oder Frameworks auch für große, komplexe Anwendungen geeignet machen.
Was ist Express.js und wofür wird es verwendet?
Express.js ist ein leistungsstarkes und flexibles Framework für Node.js, welches vollständig in JavaScript geschrieben ist. Es wird zur Verwaltung der Datenpräsentation auf der Serverseite verwendet und bietet eine einfache und effektive Methode zur Erstellung von Webanwendungen und APIs.
Was sind Middleware-Funktionen in Express.js und wie werden sie verwendet?
Middleware-Funktionen in Express.js sind Funktionen, die Zugriff auf das Request-Objekt (req), das Response-Objekt (res) und die nächste Funktion im Anforderungs-Response-Zyklus der Anwendung haben. Sie werden eingesetzt, um Anfragen zu verarbeiten, bevor sie an ihren Endpunkt gelangen - beispielsweise zur Authentifizierung, zum Parsen oder zum Logging von Anfragen.
Was sind Express.js Middleware Funktionen und welche zentrale Rolle spielen sie?
Express.js Middleware Funktionen sind Tools, die eingehende Anfragen manipulieren und verarbeiten, bevor sie an nachfolgende Routen oder Middleware weitergeleitet werden. Sie sind das Herzstück der Express.js Anwendung und dienen dazu, die Effizienz und Leistungsfähigkeit zu erhöhen, indem sie für das Parsen von Daten, das Routing, das Handling von Fehlern und die Authentifizierung verwendet werden.
Was sind beispielhafte Arten von Express.js Middleware und welche Aufgaben erfüllen sie?
Einige Beispiele für Express.js Middleware sind body-parser zum Parsen von eingehenden Anfragedaten, cookie-parser zum Lesen von Cookies, express-session zum Verwalten von Benutzersitzungen und cors zum Aktivieren von Cross-Origin Requests. Sie helfen dabei, die Funktionalität von Anwendungen zu erweitern und zu verbessern.
Wie erstellst du eine API mit Express.js?
Zunächst muss Node.js und npm auf deinem Computer installiert sein. Du startest dein Projekt mit 'npm init', installierst Express mit 'npm install express'. Du kreierst API-Routen mit Methoden wie app.get() oder app.post(). Schließlich startest du den Server mit 'node server.js'.
Was sind die Vor- und Nachteile von Express.js in der API-Erstellung?
Zu den Vorteilen von Express.js gehören seine Leichtigkeit, Flexibilität, einfache Datenbank-Integration, effizientes Routing und Middleware, sowie eine große Community. Nachteile sind potenzielle Leistungseinbußen, weniger geeignet für große Anwendungen und das Fehlen einer eingebauten Struktur.
Du hast bereits ein Konto? Anmelden
In der App öffnenDie erste Lern-App, die wirklich alles bietet, was du brauchst, um deine Prüfungen an einem Ort zu meistern.
Melde dich an für Notizen & Bearbeitung. 100% for free.
Speichere Erklärungen in deinem persönlichen Bereich und greife jederzeit und überall auf sie zu!
Mit E-Mail registrieren Mit Apple registrierenDurch deine Registrierung stimmst du den AGBs und der Datenschutzerklärung von StudySmarter zu.
Du hast schon einen Account? Anmelden
Du hast bereits ein Konto? Anmelden
Die erste Lern-App, die wirklich alles bietet, was du brauchst, um deine Prüfungen an einem Ort zu meistern.
Du hast bereits ein Konto? Anmelden