Nodejs – Redirigir url

¿Cómo obtengo un servidor node.js para redirigir a los usuarios a una página 404.html cuando ingresan una url no válida?

Hice algunas búsquedas, y parece que la mayoría de los resultados son para Express, pero quiero escribir mi servidor en puro node.js.

La lógica de determinar una URL “incorrecta” es específica de su aplicación. Podría ser un simple error de archivo no encontrado u otra cosa si está haciendo una aplicación RESTful. Una vez que te hayas dado cuenta, enviar una redirección es tan simple como:

response.writeHead(302, { 'Location': 'your/404/path.html' //add other headers here... }); response.end(); 

Es posible usar:

 res.redirect('your/404/path.html'); 

Para indicar que falta un archivo / recurso y servir una página 404, no necesita redirigir. En la misma solicitud, debe generar la respuesta con el código de estado establecido en 404 y el contenido de su página HTML 404 como cuerpo de respuesta. Aquí está el código de muestra para demostrar esto en Node.js.

 var http = require('http'), fs = require('fs'), util = require('util'), url = require('url'); var server = http.createServer(function(req, res) { if(url.parse(req.url).pathname == '/') { res.writeHead(200, {'content-type': 'text/html'}); var rs = fs.createReadStream('index.html'); util.pump(rs, res); } else { res.writeHead(404, {'content-type': 'text/html'}); var rs = fs.createReadStream('404.html'); util.pump(rs, res); } }); server.listen(8080); 

404 con contenido / cuerpo

 res.writeHead(404, {'Content-Type': 'text/plain'}); // < - redirect res.write("Looked everywhere, but couldn't find that page at all!\n"); // <- content! res.end(); // that's all! 

Redirigir a Http s

 res.writeHead(302, {'Location': 'https://example.com' + req.url}); res.end(); 

Simplemente considere dónde usa esto (por ejemplo, solo para la solicitud http), para que no tenga redirecciones interminables 😉

Prueba esto:

 this.statusCode = 302; this.setHeader('Location', '/url/to/redirect'); this.end(); 

Usé una statement de cambio, con el valor predeterminado como 404:

 var fs = require("fs"); var http = require("http"); function send404Response (response){ response.writeHead(404, {"Content-Type": "text/html"}); fs.createReadStream("./path/to/404.html").pipe(response); } function onRequest (request, response){ switch (request.url){ case "/page1": //statements break; case "/page2": //statements break; default: //if no 'match' is found send404Response(response); break; } } http.createServer(onRequest).listen(8080);