Express / Node 서버에서 404 오류를 시뮬레이션하고 싶습니다. 어떻게해야합니까?
답변
요즘에는 응답 객체에 전용 status
기능 이 있습니다. 전화하기 전에 어딘가에 연결하십시오 send
.
res.status(404) // HTTP status 404: NotFound
.send('Not found');
답변
Express 4.x에 대한 업데이트 된 답변
res.send(404)
이전 버전의 Express에서와 같이 사용 하는 대신 새로운 방법은 다음과 같습니다.
res.sendStatus(404);
Express는 “찾을 수 없음”텍스트로 매우 기본적인 404 응답을 보냅니다.
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.send
내가 믿는 두 번째 주장 은 상태 코드입니다. 그 주장에 404를 전달하십시오.
명확하게 설명하겠습니다 . expressjs.org의 문서에 따르면 전달 된 숫자 res.send()
는 상태 코드로 해석되는 것처럼 보입니다 . 따라서 기술적으로 다음과 같이 벗어날 수 있습니다.
res.send(404);
편집 : 내 나쁜, res
대신에 의미 합니다 req
. 응답시 호출해야합니다
편집 : Express 4 send(status)
부터이 방법은 더 이상 사용되지 않습니다. Express 4 이상을 사용하는 경우 res.sendStatus(404)
대신 :를 사용하십시오. (의견에 대한 팁에 대한 @badcc 감사합니다)
답변
아래에 게시 할 사이트에 따르면 서버 설정 방법이 전부입니다. 그들이 보여주는 한 가지 예는 다음과 같습니다.
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;
그리고 그들의 경로 기능 :
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;
이것은 한 가지 방법입니다.
http://www.nodebeginner.org/
다른 사이트에서 페이지를 만든 다음로드합니다. 이것은 당신이 찾고있는 것 이상일 수 있습니다.
fs.readFile('www/404.html', function(error2, data) {
response.writeHead(404, {'content-type': 'text/html'});
response.end(data);
});
답변
로부터 익스프레스 사이트 하는 NOTFOUND 예외를 정의하고 아래의 경우 / 404에 404 페이지 또는 리디렉션을 할 때마다 그것을 던져 :
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!');
});
답변
가장 좋은 방법은 IMO를 사용하는 next()
것입니다.
router.get('/', function(req, res, next) {
var err = new Error('Not found');
err.status = 404;
return next(err);
}
그런 다음 오류 처리기가 오류를 처리하고 HTML을 사용하여 오류를 멋지게 꾸밀 수 있습니다.