Ich möchte einen 404-Fehler auf meinem Express / Node-Server simulieren. Wie kann ich das machen?
Ich möchte einen 404-Fehler auf meinem Express / Node-Server simulieren. Wie kann ich das machen?
Antworten:
Heutzutage gibt es dafür eine spezielle status
Funktion für das Antwortobjekt. Verketten Sie es einfach irgendwo, bevor Sie anrufen send
.
res.status(404) // HTTP status 404: NotFound
.send('Not found');
res.status(404).render('error404')
res.status(404);
AFAIK alleine keine Antwort sendet. Es muss entweder mit etwas, zum Beispiel verkettet werden res.status(404).end();
oder Ihr zweites Beispiel, oder muss sie von zB befolgt werden res.end();
,res.send('Not found');
res.sendStatus(404)
Anstatt res.send(404)
wie in alten Express-Versionen zu verwenden, lautet die neue Methode:
res.sendStatus(404);
Express sendet eine sehr einfache 404-Antwort mit dem Text "Nicht gefunden":
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
res.status(404)
nicht so ist res.sendStatus(404)
.
res.sendStatus(404)
ist richtig. Es ist gleichbedeutend mitres.status(404).send()
res.sendStatus(404);
ist gleichbedeutend mit res.status(404).send('Not Found')
Sie müssen es nicht simulieren. Das zweite Argument ist res.send
meines Erachtens der Statuscode. Übergeben Sie einfach 404 an dieses Argument.
Lassen Sie mich Folgendes klarstellen: Gemäß der Dokumentation auf expressjs.org scheint es, als würde jede an übergebene Nummer res.send()
als Statuscode interpretiert. Technisch gesehen könnte man also davonkommen mit:
res.send(404);
Edit: Mein schlechtes, meinte ich res
statt req
. Es sollte auf die Antwort aufgerufen werden
Bearbeiten: Ab Express 4 ist die send(status)
Methode veraltet. Wenn Sie Express 4 oder höher verwenden, verwenden Sie res.sendStatus(404)
stattdessen : . (Danke @badcc für den Tipp in den Kommentaren)
res.send(404, "Could not find ID "+id)
.status(404).send('Not found')
Laut der Website, die ich unten veröffentlichen werde, ist es alles, wie Sie Ihren Server einrichten. Ein Beispiel, das sie zeigen, ist folgendes:
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 eine Möglichkeit. http://www.nodebeginner.org/
Von einer anderen Site aus erstellen sie eine Seite und laden sie dann. Dies könnte mehr von dem sein, wonach Sie suchen.
fs.readFile('www/404.html', function(error2, data) {
response.writeHead(404, {'content-type': 'text/html'});
response.end(data);
});
Definieren Sie auf der Express-Site eine NotFound-Ausnahme und lösen Sie sie aus, wenn Sie eine 404-Seite haben möchten, ODER leiten Sie im folgenden Fall zu / 404 um:
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!');
});
app.use(function(err, res, res, next) { if (err.message.indexOf('NotFound') !== -1) { res.status(400).send('Not found dude'); }; /* else .. etc */ });
IMO ist der schönste Weg, die next()
Funktion zu verwenden:
router.get('/', 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 gut formatieren.