Koa's 'ctx.status' wird nicht an den Client gesendet

8

Hier ist meine einfache Route:

%Vor%

Und hier ist mein Client-Code:

%Vor%

Alles ist in Ordnung, wenn ich einen korrekten Dateinamen sende, aber warum ist der Antwortstatuscode immer 404 , obwohl ich ihn während des Fehlers auf 500 in meinem Servercode gesetzt habe? Könnte es sein, dass die Antwort bereits fertig ist, wenn mein Code ctx.response.body = ... erreicht, in welchem ​​Fall der Code in .on('error') nichts tut?

Jede Hilfe wäre willkommen.

    
saadq 18.05.2017, 05:04
quelle

2 Antworten

3

Suchen Sie am Koa Code , hat sie spezifische Behandlung für ENOENT (was der Fehler ist, der ausgelöst wird, wenn eine Datei nicht existiert):

%Vor%

Von dem, was ich sehen kann, kann man nicht Koa zurückzuschicken, welchen Statuscode ändern (und fair zu sein, das Senden ein 404 für nicht vorhandene Dateien zurück hat Sinn machen).

Allerdings ist es eine schnelle Hack: weil Koa für err.code Matching explizit überprüft ENOENT , wenn Sie diesen Code ändern, können Sie Koa in der Rückkehr eines anderen Statuscode Trick:

%Vor%

Alternativ können Sie zunächst überprüfen ( fs.exists() verwenden, fs.access() oder fs.stat() ) zu sehen, ob die Datei vorhanden ist, bevor der Lesestrom erzeugt wird.

    
robertklep 21.05.2017, 07:03
quelle
0

Ich denke, Sie müssen etwas wie folgt versuchen:

%Vor%     
Sergaros 23.05.2017 09:16
quelle

Tags und Links