So erstellen und verwalten Sie Sitzungen in Node.js und Express.js für Anfänger

Blog

So erstellen und verwalten Sie Sitzungen in Node.js und Express.js für Anfänger

In diesem Artikel werde ich Sitzungen in Node.js erstellen und verwalten. Wir werden Express als Framework und verschiedene andere Module wie Body-Parser verwenden, um Formulardaten zu verarbeiten.



In Node.js arbeiten Sitzungen auf Anwendungsebene. Wenn Sie ein Session-Handler-Objekt als Middleware in ExpressJS initialisieren, teilt das Request-Objekt eine Instanz eines solchen Handlers mit allen Routen Ihrer Anwendung.






Das Express-Session-Modul funktioniert auf diese Weise. Nachdem ein Sitzungshandler erstellt wurde, können wir Sitzungsvariablen hinzufügen oder entfernen, indem wir einfach ein JavaScript-Objekt manipulieren.



Obwohl dieses Modul den Speicher des Servers als Standardspeichermechanismus verwendet, ist es aufgrund der Volatilität des Standardmechanismus häufig einem datenbankbasierten Ansatz in einer Produktionsumgebung vorzuziehen. Beispielsweise wird es schwierig, Benutzeraktionen zu verfolgen oder beispielsweise einen Warenkorb für die spätere Verwendung zu speichern, wenn Ihre Sitzungsdaten im Speicher gespeichert werden. Wenn Sie Ihre App neu starten, werden alle im Speicher gespeicherten Daten für immer gelöscht.



Ich habe meinen Minecraft-Benutzernamen vergessen

Wir können MongoDB als Sitzungsspeicher verwenden. Zuerst müssen wir die angeforderten Module einbinden.






npm install express-session --save npm install connect-mongodb-session --save

In MongoDB müssen wir eine Sammlung für unsere Sitzungen erstellen. Der Einfachheit halber können wir es Sitzungen nennen. Dann können wir die neu installierten Module in unserer App referenzieren.

'use strict'; const express = require('express'); const session = require('express-session'); const MongoDBStore = require('connect-mongodb-session')(session);

Die Konfiguration des MongoDB-Speichers ist einfach: Übergeben Sie einfach die Datenbankverbindungs-URL und den Namen der Sammlung an den Konstruktor.

const store = new MongoDBStore({ uri: 'mongodb://username:password@127.0.0.1/test', collection: 'sessions' });

An diesem Punkt können wir unsere Sitzungs-Middleware einrichten.

const app = express(); app.use(session({ secret: 'secret token', resave: false, saveUninitialized: true, unset: 'destroy', store: store, name: 'session cookie name', genid: (req) => { // Returns a random string to be used as a session ID } }));

Sehen Sie sich jetzt die Implementierung eines einfachen Authentifizierungsablaufs an.

app.post('/login', async (req, res) => { try { let user = await db.users.findOne({email: req.body.email}); if(user !== null) { req.session.user = { email: user.email, name: user.name }; res.redirect('/account'); } else { // Login error } } catch(err) { res.sendStatus(500); } });

Wenn sich ein Benutzer erfolgreich anmeldet, speichern wir seine Anmeldeinformationen im Sitzungsobjekt. Dieses Objekt wird von allen Routen geteilt und wir können es an Ansichten übergeben.

app.get('/account', (req, res) => { if(!req.session.user) { res.redirect('/login'); } else { res.render('account', {user: req.session.user}); } });

Wenn die Referenz in unserem Sitzungsobjekt nicht vorhanden ist, bedeutet dies einfach, dass unsere Besucher nicht angemeldet sind.

Um eine Sitzungsvariable zu entfernen, können wir den Löschoperator verwenden.

app.get('/logout', (req, res) => { if(req.session.user) { delete req.session.user; res.redirect('/login'); } else { res.redirect('/'); } });

Es ist jetzt klar, dass es im Wesentlichen nur darum geht, die Eigenschaften eines JavaScript-Objekts abzurufen/einzustellen/zu löschen.

Wie bereits erwähnt, werden in ExpressJS Sitzungen auf Anwendungsebene erstellt. Das bedeutet, dass Sie beim Starten Ihrer App einen brandneuen Sitzungshandler für den gesamten Node-Prozess erstellen. Stattdessen werden in PHP-Sitzungen auf Anfrage erstellt. Wenn Sie eine Seite aufrufen, die session_start() enthält, überprüft PHP, ob der Browser das Sitzungstoken bereits gespeichert hat. Wenn ja, fährt er mit der aktuellen Sitzung fort, andernfalls startet er eine neue Sitzung.

Angenommen, Sie implementieren einen Einkaufswagen in Express. Wenn Sie die Variable des Warenkorbs ganz am Anfang festlegen, erhalten Sie einfach das unerwünschte Ergebnis, dass ein einziger Warenkorb von allen Benutzern Ihrer Website geteilt wird. Mit anderen Worten, Sitzungsvariablen müssen nach bestimmten Benutzeraktionen lokal festgelegt werden.

Erfahren Sie mehr

#js #node-js #express #javascript