Ich möchte einen 404-Fehler auf meinem Express/Node-Server simulieren. Wie kann ich das machen?
Wie sende ich programmgesteuert eine 404-Antwort mit Express/Node?
Zufallsblau
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, zres.status(404).end();
oder Ihr zweites Beispiel, oder es muss gefolgt werden von zBres.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)
nichtres.sendStatus(404)
.– Jake Wilson
24. Dezember 2015 um 5:54 Uhr
-
res.sendStatus(404)
ist richtig. Es ist äquivalent zures.status(404).send()
– Justin Johnson
19. Februar 2016 um 20:16 Uhr
-
Ja
res.sendStatus(404);
ist äquivalent zures.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
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
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);
});
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
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
Wie würde sich “simuliert” von einem “echten” unterscheiden?
– Jon Hanna
5. Dezember 2011 um 23:34 Uhr