ExpressJS-Sitzungsspeicher mit MongoDB, PostgreSQL

In diesem Tutorial wird erläutert, wie Sie ExpressJS-Sitzungsspeicher mit MongoDB und PostgreSQL verwenden.

In einem unserer vorherigen Beiträge haben wir gesehen, wie man mit Sitzungen in der ExpressJS-App arbeitet. In diesem Beispiel haben wir Speicher als Sitzungsspeicher verwendet. Wir haben auch erwähnt, dass wir Speicher durch andere Sitzungsspeicher wie MongoDB, Redis, MySQL, FileSystem usw. ersetzen können. In diesem Beitrag werden wir das weiter untersuchen und zeigen, wie man MongoDB und PsotgreSQL als Sitzungsspeicher verwendet.

Express-2

Warum: ExpressJS-Sitzungsspeicher als Datenbank?

Warum müssen wir die Sitzung in einer externen Datenbank speichern? Bei Anwendungen, die auf verschiedenen Computern/Knoten bereitgestellt werden, werden die Sitzungsdaten durch die Speicherung der Sitzungsdaten im Speicher lokal auf diesem Computer/Knoten gespeichert. Wenn die Anfrage also von einem anderen Computer/Knoten bedient wird, ist die Sitzung für den Benutzer nicht verfügbar.

Um dieses Problem zu vermeiden, speichern wir die Sitzungsdaten in einem externen Speicher wie MySQL, MonogDB und anderen DBs. Dies ist eine gängige Praxis, um die Sitzungsdaten in der Datenbank zu speichern und auf die verschiedenen Server zu verteilen, um einen Verlust von Sitzungsdaten zu vermeiden, wenn einer der Server ausfällt.

MongoDB-Sitzungsspeicher

Um MongoDB als Sitzungsspeicher verwenden zu können, müssten wir installieren connect-mongo Paket zusammen mit dem vorhandenen Treiber, um eine Verbindung zu MongoDB herzustellen. Connect-mongo ist eine der beliebten und gut getesteten ExpressJS-Middleware zum Speichern der Sitzungen.

Lassen Sie uns die App initialisieren und die erforderlichen Pakete installieren. Im folgenden Code installieren wir die folgenden Pakete:

  • Mongodb
  • connect-mongo
  • äußern
  • Express-Sitzung
$> mkdir mongodb-session-store

$> cd mongodb-session-store

$> npm init

Press ^C at any time to quit.
name: (mongodb-session-store)
version: (1.0.0)
description: sample using mongodb as session store
entry point: (index.js)
test command:
git repository:
keywords:
author: mohamed sanaulla
license: (ISC)
About to write to G:\node\mongodb-session-store\package.json:

{
  "name": "mongodb-session-store",
  "version": "1.0.0",
  "description": "sample using mongodb as session store",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "mohamed sanaulla",
  "license": "ISC"
}


Is this ok? (yes)

$> npm install --save mongodb
$> npm install --save connect-mongo
$> npm install --save express
$> npm install --save express-session

Lassen Sie uns nun eine einfache Express-App erstellen, die Sitzungen nutzt. Dieses Beispiel finden Sie im Beitrag hier und kopieren es für dieses Tutorial. Anschließend werden wir den Speichersitzungsspeicher durch MongoDB ersetzen.

var express = require('express');
var session = require('express-session');

var app = express();

var sessionOptions = {
  secret: "secret",
  resave : true,
  saveUninitialized : false
};

app.use(session(sessionOptions));

app.get("/", function(req, res){
  if ( !req.session.views){
    req.session.views = 1;
  }else{
    req.session.views += 1;
  }

  res.json({
    "status" : "ok",
    "frequency" : req.session.views
  });
});

app.listen(3300, function (){
  console.log("Server started at: http://localhost:3300");
});

Eine der Optionen in den Sitzungsoptionen ist die Angabe des Stores. Wir können den neuen Laden im anbieten store Eigentum der sessionOptions Objekt. Um eine Verbindung zu MongoDB herzustellen, müssten wir ihm auch ein vorhandenes Verbindungsobjekt oder die Verbindungs-URL bereitstellen, dh Parameter, die zum Herstellen einer Verbindung zu MongoDB erforderlich sind. Unten ist der Code mit MongoDB als Sitzungsspeicher:

var express = require('express');
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);

var app = express();

var sessionOptions = {
  secret: "secret",
  resave : true,
  saveUninitialized : false,
  store: new MongoStore({
    url:"mongodb://localhost/test",
    //other advanced options
  })
};

app.use(session(sessionOptions));

app.get("/", function(req, res){
  if ( !req.session.views){
    req.session.views = 1;
  }else{
    req.session.views += 1;
  }

  res.json({
    "status" : "ok",
    "frequency" : req.session.views
  });
});

app.listen(3300, function (){
  console.log("Server started at: http://localhost:3300");
});

Stellen Sie vor dem Ausführen der Anwendung sicher, dass Sie dies getan haben mongodb installiert und der Monogdb-Daemon, dh monogd läuft. Die geänderten Teile des Codes wurden oben hervorgehoben und es handelt sich um eine minimale Änderung.

Um zu bestätigen, dass wir die Sitzungsdaten tatsächlich in MongoDB schreiben, laden Sie die Anwendung http://localhost:3300/ einige Male in den Browser, stellen Sie dann eine Verbindung zu mongodb her und führen Sie die folgenden Befehle aus:

> show collections
scores
sessions
students
system.indexes
system.profile
tasks
> db.sessions.find().pretty()
{
        "_id" : "dTzBBxq8UTuS-aGuivY1iqgiITaEcJdz",
        "session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"views\":80}",
        "expires" : ISODate("2015-09-27T03:30:55.179Z")
}

Es wird eine Sammlung nach Namenssitzungen erstellt, wobei jedes Dokument Sitzungsdaten darstellt, wie im oben hervorgehobenen Code gezeigt.

PostgreSql-Sitzungsspeicher

Sehen wir uns nun an, wie wir PostgreSql als Sitzungsspeicher verwenden können. Es erfordert ein wenig Setup in PostgreSql. Wir müssten das erstellen session Tabelle in der Datenbank. Der Aufbau der Tabelle ist mit versehen connect-pg-simple Knotenpaket. Lassen Sie uns zunächst dieses Paket installieren und dann die Tabellenstruktur betrachten. Nachfolgend finden Sie die Befehle, die wir ausführen, um hierfür eine neue App zu erstellen und relevante Pakete zu installieren.

G:\node>mkdir postgres-session-store

G:\node>cd postgres-session-store

G:\node\postgres-session-store>npm init

Press ^C at any time to quit.
name: (postgres-session-store)
version: (1.0.0)
description: Demo to use PostgreSql as session store
entry point: (index.js)
test command:
git repository:
keywords:
author: mohamed sanaulla
license: (ISC)
About to write to G:\node\postgres-session-store\package.json:

{
  "name": "postgres-session-store",
  "version": "1.0.0",
  "description": "Demo to use PostgreSql as session store",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "mohamed sanaulla",
  "license": "ISC"
}


Is this ok? (yes)
G:\node\postgres-session-store>npm install --save express
G:\node\postgres-session-store>npm install --save express-session
G:\node\postgres-session-store>npm install --save connect-pg-simple

Die Struktur der Sitzungstabelle finden Sie im Pfad: node_modules/connect-pg-simple/table.sqlund die Struktur der Tabelle ist wie folgt:

CREATE TABLE "session" (
  "sid" varchar NOT NULL COLLATE "default",
        "sess" json NOT NULL,
        "expire" timestamp(6) NOT NULL
)
WITH (OIDS=FALSE);

ALTER TABLE "session" ADD CONSTRAINT "session_pkey" 
PRIMARY KEY ("sid") NOT DEFERRABLE INITIALLY IMMEDIATE;

Führen Sie die obige SQL aus, um die Tabelle in Ihrer Postgres-Datenbank zu erstellen. Wir werden verwenden postgres db.

Lassen Sie uns denselben Express-App-Code verwenden, den wir zu Beginn dieses Artikels verwendet haben. Der Einfachheit halber wiederholen wir den Code hier:

var express = require('express');
var session = require('express-session');

var app = express();

var sessionOptions = {
  secret: "secret",
  resave : true,
  saveUninitialized : false
};

app.use(session(sessionOptions));

app.get("/", function(req, res){
  if ( !req.session.views){
    req.session.views = 1;
  }else{
    req.session.views += 1;
  }

  res.json({
    "status" : "ok",
    "frequency" : req.session.views
  });
});

app.listen(3300, function (){
  console.log("Server started at: http://localhost:3300");
});

Lassen Sie uns den obigen Code aktualisieren, um ihn zu deklarieren PostgreSql-Sitzungsspeicher Wie nachfolgend dargestellt:

var express = require('express');
var session = require('express-session');
var PostgreSqlStore = require('connect-pg-simple')(session);

var app = express();

var sessionOptions = {
  secret: "secret",
  resave : true,
  saveUninitialized : false,
  store : new PostgreSqlStore({
    /*
    connection string is built by following the syntax:
    postgres://USERNAME:PASSWORD@HOST_NAME:PORT/DB_NAME
    */
    conString: "postgres://postgres:postgres@localhost:5433/postgres"
  })
};

app.use(session(sessionOptions));

app.get("/", function(req, res){
  if ( !req.session.views){
    req.session.views = 1;
  }else{
    req.session.views += 1;
  }

  res.json({
    "status" : "ok",
    "frequency" : req.session.views
  });
});

app.listen(3300, function (){
  console.log("Server started at: http://localhost:3300");
});

Im obigen Code sind die hervorgehobenen Teile diejenigen, die den Sitzungsspeicher festlegen PostgreSql. Lassen Sie uns die Anwendung ausführen und die URL http://localhost:3300/ mehrmals laden. Führen Sie dann die folgende Abfrage in Postgres aus, um die Daten im zu überprüfen session Tisch:

select * from session;

Und die Ausgabe:
Express-Session-Stores

Abschluss

In diesem Artikel haben wir gesehen, wie wir den ExpressJS Session Store als MongoDB und Postgres zum Speichern der Sitzungsdaten nutzen können. Dies ist sehr nützlich, wenn die Anwendung auf mehrere Knoten verteilt ist. Auf ähnliche Weise können wir Redis, LevelDB und andere externe Stores zum Speichern von Sitzungsdaten verwenden. Wenn Sie Fragen haben, schreiben Sie diese bitte in den Kommentarbereich.

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen