In node.js zeigt readFile () , wie ein Fehler erfasst wird. Es gibt jedoch keinen Kommentar für die Funktion readFileSync () zur Fehlerbehandlung. Wenn ich versuche, readFileSync () zu verwenden, wenn keine Datei vorhanden ist, wird der Fehler angezeigt Error: ENOENT, no such file or directory
.
Wie erfasse ich die ausgelöste Ausnahme? Das Dokument gibt nicht an, welche Ausnahmen ausgelöst werden, daher weiß ich nicht, welche Ausnahmen ich abfangen muss. Ich sollte beachten, dass ich den generischen Stil "try jede einzelne Ausnahme fangen" von try / catch-Anweisungen nicht mag. In diesem Fall möchte ich die spezifische Ausnahme abfangen, die auftritt, wenn die Datei nicht vorhanden ist, und ich versuche, readFileSync auszuführen.
Bitte beachten Sie, dass ich Synchronisierungsfunktionen nur beim Start ausführe, bevor Verbindungsversuche ausgeführt werden. Daher sind keine Kommentare erforderlich, dass ich keine Synchronisierungsfunktionen verwenden sollte :-)
quelle
fs.existsSync()
wie in meiner neuen AntwortAntworten:
Grundsätzlich wird
fs.readFileSync
ein Fehler ausgegeben, wenn eine Datei nicht gefunden wird. Dieser Fehler stammt vomError
Prototyp und wird mit ausgelöstthrow
. Daher kann nur mit einemtry / catch
Block abgefangen werden:Leider können Sie nicht erkennen, welcher Fehler ausgelöst wurde, wenn Sie sich nur die Prototypenkette ansehen:
ist das Beste, was Sie tun können, und dies gilt für die meisten (wenn nicht alle) Fehler. Daher würde ich vorschlagen, dass Sie mit der
code
Immobilie gehen und ihren Wert überprüfen:Auf diese Weise behandeln Sie nur diesen spezifischen Fehler und werfen alle anderen Fehler erneut.
Alternativ können Sie auch auf die
message
Eigenschaft des Fehlers zugreifen , um die detaillierte Fehlermeldung zu überprüfen. In diesem Fall lautet dies:Hoffe das hilft.
quelle
EACCES
Code sollte in der if-Anweisung für den Fall überprüft werden, dass die Datei vorhanden ist, aber aufgrund fehlender Berechtigungen nicht gelesen werden kannIch bevorzuge diese Art, damit umzugehen. Sie können überprüfen, ob die Datei synchron vorhanden ist:
quelle
files
mit allem verfasst, was ich gelernt habe, um das Asynchronisieren und Ausprobieren zu vereinfachen.Sie müssen den Fehler abfangen und dann überprüfen, um welche Art von Fehler es sich handelt.
quelle
Ich verwende ein sofort aufgerufenes Lambda für diese Szenarien:
async
Ausführung:quelle
fs
ist einfs.readFileAsync()
ist jetztfs.readFile()
und sollte auch die asynchrone Funktion nicht in einen try / catch in node.js einfügen. Der Versuch / Fang wird niemals den Fehler erhalten, da er asynchron ist. Übergeben Sie stattdessen den Fehler im Rückruf und behandeln Sie ihn dort:fs.readFile('/etc/passwd', (err, data) => { if (err) throw err; console.log(data); });
von: nodejs.org/dist/latest-v12.x/docs/api/…Versuchen Sie stattdessen, Async zu verwenden, um zu vermeiden, dass der einzige Thread blockiert wird, den Sie mit NodeJS haben. Überprüfen Sie dieses Beispiel:
Später kann diese asynchrone Funktion mit try / catch von jeder anderen Funktion verwendet werden:
Viel Spaß beim Codieren!
quelle
Der JavaScript-Mechanismus try… catch kann nicht zum Abfangen von Fehlern verwendet werden, die von asynchronen APIs generiert werden. Ein häufiger Fehler für Anfänger besteht darin, zu versuchen, throw in einem Fehler-First-Callback zu verwenden:
Dies funktioniert nicht, da die an fs.readFile () übergebene Rückruffunktion asynchron aufgerufen wird. Zu dem Zeitpunkt, an dem der Rückruf aufgerufen wurde, ist der umgebende Code, einschließlich des try… catch-Blocks, bereits beendet. Das Auslösen eines Fehlers innerhalb des Rückrufs kann in den meisten Fällen den Node.js-Prozess zum Absturz bringen. Wenn Domänen aktiviert sind oder ein Handler bei process.on registriert wurde ('uncaughtException'), können solche Fehler abgefangen werden.
Referenz: https://nodejs.org/api/errors.html
quelle