2017-02-18 5 views
0

Ich verwende die ID-Variable über verschiedene Funktionen. Die ID ist außerhalb der Funktionen definiert. Könnte dies dazu führen, dass die Variable beim Empfangen mehrerer gleichzeitiger Anfragen überschrieben wird? Ist das Verhalten dasselbe, wenn dies im Browser statt in Node.js geschieht?Modul Bereich in Node.js - gleichzeitige Express-Anfragen

var id; 
server.get('/myapp', function (req, res, next) { 
    id = uuid.v4(); 
} 

Antwort

1

Ja, es führt zu Konflikten

Wenn Ihre Request-Handler haben keine asynchronen Operationen in ihnen, die mehr als eine Anfrage zu ermöglichen, im Flug zur gleichen Zeit zu sein, dann ja, die Verwendung eines Eine Modulebenevariable, auf die mehr als eine Anforderung zugreifen kann, verursacht Konflikte, und eine Anforderung könnte die Variable, die eine andere verwendet, überlisten.

Auf den Punkt gebracht, tun dies für Daten

Modulebene Variablen sind nur nicht, dass alle Anforderungen sicher und gemeinsam zugreifen können. Daten für eine einzelne Anforderung sollten innerhalb des Anforderungshandlers oder einer Eigenschaft für das Anforderungs- oder Antwortobjekt oder ein Objekt ähnlichen Typs sein, das pro Anforderung und nicht unter mehreren Anforderungen gemeinsam genutzt wird.

benötigten Daten nur während der Bearbeitung eines Antrags

Also, wenn Sie einige Daten für die Dauer dieser besonderen Anforderung nur Zugang benötigen, dann können Sie es in einer lokalen Variablen in den Request-Handler setzen und Sie können es an alle anderen Funktionen weitergeben, die Sie anrufen, wenn Sie diese benötigen, während Sie diese Anfrage bearbeiten. Oder Sie können es als eine Eigenschaft für das Objekt req zuweisen, das für jede separate Anforderung eindeutig ist, und dann das Objekt req an alle anderen Funktionen übergeben, die Sie aufrufen und Zugriff auf die Daten benötigen.

benötigten Daten von einer Anfrage zum nächsten, aber unterschiedlich für jeden Benutzer

Wenn Sie den Überblick über einige Daten von einer Anfrage zum nächsten für einen bestimmten Kunden zu halten versuchen, dann können Sie nicht speichern Sie es auf diese Weise überhaupt. Sie werden wahrscheinlich einen Sitzungsmanager verwenden müssen, um eine dauerhafte Sitzung zu erstellen, die von einer Anfrage zur nächsten mit einem bestimmten Browser korreliert werden kann. Express-Session ist ein beliebter Session Manager, der es ziemlich einfach macht.

Die Funktionsweise eines Sitzungsmanagers besteht darin, dass das erste Mal, wenn ein bestimmter Browser Ihren Server trifft, ein eindeutiger Cookie zugewiesen wird. Dieser Cookie enthält eine verschlüsselte Sitzungs-ID. Dann erstellt der Sitzungsmanager ein Sitzungsobjekt, das von dieser Sitzungs-ID indiziert wird. Wenn eine zweite Anfrage vom selben Browser eingeht, holt express-session das zuvor gesetzte Cookie, entschlüsselt die SessionID, sucht das entsprechende Session-Objekt und lässt Sie dann auf alle Daten zugreifen, die Sie im Session-Objekt gespeichert haben bestimmter Benutzer.