Lassen Sie uns in diesem Abschnitt über die Methoden von NodeJs erfahren, um nicht blockierende Operationen zu implementieren.
Lassen Sie uns zunächst den Start -Handler ändern:
Die Codekopie lautet wie folgt:
var exec = required ("chirt_process"). exec;
Funktion start () {
console.log ("Anfragenhandler" Start "wurde genannt.");
var content = "leer";
exec ("ls -lah", Funktion (Fehler, stdout, stderr) {
content = stdout;
});
Inhalt zurückgeben;
}
Funktion upload () {
console.log ("Anfrage -Handler" Upload "wurde genannt.");
zurück "Hallo Upload";
}
exports.Start = start;
exports.Upload = Upload;
Dieser Code erstellt einen neuen variablen Inhalt (der Anfangswert ist "leer"), führt den Befehl "ls -Lah" aus, weist dem Inhalt das Ergebnis zu und gibt schließlich den Inhalt zurück.
Wir haben ein neues Node.js-Modul, Child_process, eingeführt, mit dem eine einfache und praktische nicht blockierende Operation implementiert wird: exec ().
Was macht exec ()?
Es führt einen Shell -Befehl von node.js. Im obigen Beispiel verwenden wir es, um alle Dateien im aktuellen Verzeichnis ("ls -Lah") zu erhalten und dann die Dateiinformationen an den Browser auszugeben, wenn /startUrl -Anforderungen.
Wir starten den Server und besuchen "http: // localhost: 8888/start" und wir werden feststellen, dass der Inhaltsausgang auf der Seite leer ist.
exec () funktioniert und damit können wir sehr zeitaufwändige Shell-Operationen ausführen, ohne unsere App zu zwingen, anzuhalten und auf diesen Vorgang zu warten.
Trotzdem scheint die Inhaltsausgabe der Seite 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 Aufrufen von Exec () sofort Rückgabeinhalte ausführen.
Zu diesem Zeitpunkt ist der Inhalt immer noch "leer", da die an exec () übergebene Rückruffunktion noch nicht ausgeführt wurde - da der Betrieb von exec () asynchron ist.
Im nächsten Abschnitt werden wir erklären, wie dieses Problem gelöst werden kann.