Lassen Sie ein Modul die Daten für Sie und dann require()
in diesem Modul verwalten, wo immer Sie darauf zugreifen möchten. require()
ist im Cache gespeichert, so dass nachfolgende Aufrufe zu Ihnen jedes Mal das gleiche Modul zurückbekommen, was gut für gemeinsame Daten funktioniert, ohne global zugängliche Variablen zu verwenden und gleichzeitig eine ordnungsgemäße Abhängigkeitsverwaltung aufrechtzuerhalten (Globals sind in node.js generell böse, weil sie nicht angezeigt werden) Abhängigkeiten überhaupt).
Bitte beachten Sie, dass global zugängliche Daten in node.js von Anfragen von allen Benutzern gemeinsam genutzt werden, es sei denn, Sie machen sie nur für einige Benutzer verfügbar. Eine Variable wie global.myuser
klingt also verdächtig gefährlich, es sei denn, die myuser
ist ein Serverbenutzer (etwas, von dem es nur einen gibt), kein tatsächlicher Benutzer von einer Anfrage.
Hier ist ein einfaches Beispiel:
// shared_data.js
var myData = {someKey: 12345678};
module.exports = myData;
Dann in anderen Modulen:
var sharedData = require('./shared_data.js');
// you can access the sharedData object here
Wenn Sie versuchen, eingeloggte Benutzer erinnern, dann müssen Sie ein beteiligtes System Dazu gehört das Verfolgen eines bestimmten Benutzers über ein Login-Cookie-Token und das Speichern gültiger Login-Token auf dem Server, bei denen verschiedene Anfragen prüfen können, ob der Benutzer tatsächlich angemeldet ist.
Für eingeloggte Benutzer mit Express, würde ich vorschlagen express-session
als es 90% der Arbeit für Sie. Sie erhalten ein Objekt für jeden angemeldeten Benutzer, in dem Sie alles speichern können, was Sie möchten, und diese Information wird direkt nur mit diesem Benutzer korreliert.
Das Sitzungsobjekt für den aktuellen Benutzer wird bei einer eingehenden Anfrage automatisch im Objekt request
verfügbar sein. Und Sie können dieses Sitzungsobjekt an jede andere Funktion übergeben, die Sie in einer Anfrage aufrufen möchten.
Ja, sie werden in Benutzer angemeldet sein. Ich möchte, dass der Server weiß, zu welchem Benutzer er Daten sendet, sodass ich seine ID über meinen MongoDB-Aufruf einbeziehen kann, um Daten zurückzuholen, die nur für sie relevant sind.Es kam mir sogar gar nicht in den Sinn, dass ich die globalen Daten speichern würde, aber das wäre für alle Benutzer dasselbe. Was wäre, wenn ich einen Ansatz wie das 'express-sessions'-Paket verwende? – Fizzix
Siehe meine Antwort zum Speichern der Daten pro Benutzer: http://Stackoverflow.com/a/37504339/1229624 – Aminadav
Ich würde die Verwendung von Express-Sitzung empfehlen. Sehen Sie, was ich meiner Antwort hinzugefügt habe. – jfriend00