Heim > Artikel > Web-Frontend > Erstellen Sie ganz einfach einen NodeJS-Server (8): So erreichen Sie Nicht-Blockierung_node.js
In diesem Abschnitt werfen wir einen Blick darauf, wie nodejs nicht blockierende Vorgänge implementiert.
Ändern wir zuerst den Starthandler:
Dieser Code erstellt einen neuen Variableninhalt (Anfangswert ist „leer“), führt den Befehl „ls -lah“ aus, weist das Ergebnis dem Inhalt zu und gibt schließlich den Inhalt zurück.
Wir haben ein neues Node.js-Modul eingeführt, child_process. Der Grund, warum wir es verwenden, ist die Implementierung einer einfachen und praktischen nicht blockierenden Operation: exec().
Was macht exec()?
Es führt einen Shell-Befehl von Node.js aus. Im obigen Beispiel verwenden wir es, um alle Dateien im aktuellen Verzeichnis abzurufen („ls -lah“) und geben dann die Dateiinformationen an den Browser aus, wenn /startURL angefordert wird.
Wir starten den Server und besuchen „http://localhost:8888/start“ und stellen fest, dass der Ausgabeinhalt der Seite leer ist.
exec() kommt ins Spiel. Damit können wir sehr zeitaufwändige Shell-Operationen ausführen, ohne unsere Anwendung dazu zu zwingen, anzuhalten und auf die Operation zu warten.
Trotzdem scheint der von der Seite ausgegebene Inhalt nicht das gewünschte Ergebnis zu sein.
Lassen Sie uns die Gründe analysieren:
Unser Code wird synchron ausgeführt, was bedeutet, dass Node.js nach dem Aufruf von exec() den Rückgabeinhalt sofort ausführt
Zu diesem Zeitpunkt ist der Inhalt noch „leer“, da die an exec() übergebene Callback-Funktion noch nicht ausgeführt wurde – da die Operation von exec() asynchron ist.
Im nächsten Abschnitt stellen wir vor, wie Sie dieses Problem lösen können.