[javascript] Express / Node로 프로그래밍 방식으로 404 응답을 보내는 방법은 무엇입니까?

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);
        });

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


답변

로부터 익스프레스 사이트 하는 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을 사용하여 오류를 멋지게 꾸밀 수 있습니다.


답변