Wie sende ich programmgesteuert eine 404-Antwort mit Express/Node?

Lesezeit: 5 Minuten

Benutzer-Avatar
Zufallsblau

Ich möchte einen 404-Fehler auf meinem Express/Node-Server simulieren. Wie kann ich das machen?

  • Wie würde sich “simuliert” von einem “echten” unterscheiden?

    – Jon Hanna

    5. Dezember 2011 um 23:34 Uhr

Benutzer-Avatar
Zeichnete Noakes

Seit Express 4.0 gibt es eine dedizierte sendStatus Funktion:

res.sendStatus(404);

Wenn Sie eine frühere Version von Express verwenden, verwenden Sie die status Funktion stattdessen.

res.status(404).send('Not found');

  • Dies funktioniert auch mit gerenderten Seiten: res.status(404).render('error404')

    – jmu

    21. Mai 2013 um 5:40 Uhr

  • Erwähnenswert ist das für sich allein res.status(404); sendet keine Antwort AFAIK. Es muss entweder mit etwas verkettet werden, z res.status(404).end(); oder Ihr zweites Beispiel, oder es muss gefolgt werden von zB res.end();, res.send('Not found');

    – UpTheCreek

    15. Oktober 2014 um 12:03 Uhr


  • @UpTheCreek, ich werde das erste Beispiel aus dem Code entfernen, um das Potenzial für diese Verwirrung zu vermeiden.

    – Zeichnete Noakes

    15. Oktober 2014 um 13:10 Uhr

  • kürzere Version res.sendStatus(404)

    – Bentescha

    14. Januar 2019 um 18:51 Uhr

  • @bentesha Plan und einfach.

    – NME New Media Entertainment

    11. November 2020 um 17:46 Uhr

Aktualisierte Antwort für Express 4.x

Anstatt zu verwenden res.send(404) Wie in alten Versionen von Express lautet die neue Methode:

res.sendStatus(404);

Express sendet eine sehr einfache 404-Antwort mit dem Text „Not Found“:

HTTP/1.1 404 Not Found
X-Powered-By: Express
Vary: Origin
Content-Type: text/plain; charset=utf-8
Content-Length: 9
ETag: W/"9-nR6tc+Z4+i9RpwqTOwvwFw"
Date: Fri, 23 Oct 2015 20:08:19 GMT
Connection: keep-alive

Not Found

  • Ich bin mir ziemlich sicher, dass es nur so ist res.status(404) nicht res.sendStatus(404).

    – Jake Wilson

    24. Dezember 2015 um 5:54 Uhr

  • res.sendStatus(404) ist richtig. Es ist äquivalent zu res.status(404).send()

    – Justin Johnson

    19. Februar 2016 um 20:16 Uhr

  • Ja res.sendStatus(404); ist äquivalent zu res.status(404).send('Not Found')

    – Rick

    10. September 2016 um 15:51 Uhr


  • @JakeWilson jetzt was ist das ??

    – y.kaf.

    20. Juni 2020 um 16:52 Uhr

Benutzer-Avatar
Rossipedia

Sie müssen es nicht simulieren. Das zweite Argument zu res.send Ich glaube, das ist der Statuscode. Übergeben Sie einfach 404 an dieses Argument.

Lassen Sie mich das klarstellen: Per die Dokumentation auf expressjs.org es scheint, als ob irgendeine Nummer weitergegeben wird res.send() wird als Statuscode interpretiert. Technisch könnte man also davonkommen:

res.send(404);

Bearbeiten: Meine Güte, meinte ich res Anstatt von req. Es sollte auf die Antwort aufgerufen werden

Bearbeiten: Ab Express 4 ist die send(status) Methode ist veraltet. Wenn Sie Express 4 oder höher verwenden, verwenden Sie: res.sendStatus(404) stattdessen. (Danke @badcc für den Tipp in den Kommentaren)

  • Sie können auch eine Nachricht mit dem 404 senden: res.send(404, "Could not find ID "+id)

    – Pylinux

    5. Mai 2013 um 7:35 Uhr


  • Das direkte Senden eines Statuscodes ist in 4.x veraltet und wird wahrscheinlich irgendwann entfernt. Am besten dran bleiben .status(404).send('Not found')

    – Matt Fletcher

    22. Oktober 2014 um 8:50 Uhr

  • Für Express 4: „express veraltet res.send(status): Verwenden Sie stattdessen res.sendStatus(status)“

    – badcc

    3. Januar 2016 um 3:36 Uhr


Benutzer-Avatar
schädelleer

Laut der Website, die ich unten posten werde, ist es alles, wie Sie Ihren Server einrichten. Ein Beispiel, das sie zeigen, ist dieses:

var http = require("http");
var url = require("url");

function start(route, handle) {
  function onRequest(request, response) {
    var pathname = url.parse(request.url).pathname;
    console.log("Request for " + pathname + " received.");

    route(handle, pathname, response);
  }

  http.createServer(onRequest).listen(8888);
  console.log("Server has started.");
}

exports.start = start;

und ihre Routenfunktion:

function route(handle, pathname, response) {
  console.log("About to route a request for " + pathname);
  if (typeof handle[pathname] === 'function') {
    handle[pathname](response);
  } else {
    console.log("No request handler found for " + pathname);
    response.writeHead(404, {"Content-Type": "text/plain"});
    response.write("404 Not found");
    response.end();
  }
}

exports.route = route;

Dies ist ein Weg.
http://www.nodebeginner.org/

Von einer anderen Site erstellen sie eine Seite und laden sie dann. Dies könnte eher das sein, wonach Sie suchen.

fs.readFile('www/404.html', function(error2, data) {
            response.writeHead(404, {'content-type': 'text/html'});
            response.end(data);
        });

http://blog.poweredbyalt.net/?p=81

Benutzer-Avatar
alessioalex

Von dem Express-Websitedefinieren Sie eine NotFound-Ausnahme und lösen Sie sie aus, wenn Sie im folgenden Fall eine 404-Seite ODER eine Weiterleitung zu /404 wünschen:

function NotFound(msg){
  this.name="NotFound";
  Error.call(this, msg);
  Error.captureStackTrace(this, arguments.callee);
}

NotFound.prototype.__proto__ = Error.prototype;

app.get('/404', function(req, res){
  throw new NotFound;
});

app.get('/500', function(req, res){
  throw new Error('keyboard cat!');
});

  • Dieser Beispielcode befindet sich nicht mehr unter dem Link, auf den Sie verweisen. Könnte dies für eine frühere Version von Express gelten?

    – Zeichnete Noakes

    8. Mai 2013 um 10:51 Uhr

  • Es gilt immer noch für den vorhandenen Code, alles, was Sie tun müssen, ist, die Fehlerbehandlungs-Middleware zu verwenden, um den Fehler abzufangen. Ex: app.use(function(err, res, res, next) { if (err.message.indexOf('NotFound') !== -1) { res.status(400).send('Not found dude'); }; /* else .. etc */ });

    – alessioalex

    9. Mai 2013 um 18:59 Uhr

Benutzer-Avatar
Sam

IMO ist der schönste Weg, die zu verwenden next() Funktion:

router.get("https://stackoverflow.com/", function(req, res, next) {
    var err = new Error('Not found');
    err.status = 404;
    return next(err);
}

Dann wird der Fehler von Ihrem Fehlerbehandler behandelt, und Sie können den Fehler mithilfe von HTML schön formatieren.

  • Dieser Beispielcode befindet sich nicht mehr unter dem Link, auf den Sie verweisen. Könnte dies für eine frühere Version von Express gelten?

    – Zeichnete Noakes

    8. Mai 2013 um 10:51 Uhr

  • Es gilt immer noch für den vorhandenen Code, alles, was Sie tun müssen, ist, die Fehlerbehandlungs-Middleware zu verwenden, um den Fehler abzufangen. Ex: app.use(function(err, res, res, next) { if (err.message.indexOf('NotFound') !== -1) { res.status(400).send('Not found dude'); }; /* else .. etc */ });

    – alessioalex

    9. Mai 2013 um 18:59 Uhr

1301860cookie-checkWie sende ich programmgesteuert eine 404-Antwort mit Express/Node?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy