ti-enxame.com

Como enviar programaticamente uma resposta 404 com o Express / Node?

Eu quero simular um erro 404 no meu servidor Express/Node. Como eu posso fazer isso?

153
Randomblue

Hoje em dia há uma função dedicada status para isso no objeto de resposta. Apenas encadeie em algum lugar antes de chamar send.

res.status(404)        // HTTP status 404: NotFound
   .send('Not found');
234
Drew Noakes

Você não precisa simular isso. O segundo argumento para res.send eu acredito é o código de status. Apenas passe 404 para esse argumento.

Deixe-me esclarecer que: Per a documentação em expressjs.org parece que qualquer número passado para res.send() será interpretado como o código de status. Então, tecnicamente, você poderia se safar:

res.send(404);

Edit: Meu mau, eu quis dizer res em vez de req. Deve ser chamado na resposta

Edit: A partir do Express 4, o método send(status) foi preterido. Se você estiver usando o Express 4 ou posterior, use: res.sendStatus(404) em vez disso. (Obrigado @badcc pela dica nos comentários)

42
rossipedia

Resposta atualizada para o Express 4.x

Em vez de usar res.send(404) como nas versões antigas do Express, o novo método é:

res.sendStatus(404);

O Express enviará uma resposta 404 básica com o texto "Não encontrado":

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
38
Brad

De acordo com o site que vou postar abaixo, é tudo como você configura seu servidor. Um exemplo que eles mostram é isto:

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;

e sua função de rota:

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;

Este é um caminho. http://www.nodebeginner.org/

De outro site, eles criam uma página e a carregam. Isso pode ser mais do que você está procurando.

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

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

10
craniumonempty

A partir do Express site , defina uma exceção NotFound e jogá-lo sempre que você quiser ter uma página 404 OR redirecionar para/404 no caso abaixo:

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!');
});
9
alessioalex