¿Cómo consigo que un servidor node.js redirija 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 node.js.
¿Cómo consigo que un servidor node.js redirija 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 node.js.
Respuestas:
La lógica para determinar una URL "incorrecta" es específica de su aplicación. Podría ser un simple error de archivo no encontrado o algo más si está haciendo una aplicación RESTful. Una vez que lo haya descubierto, enviar una redirección es tan simple como:
response.writeHead(302, {
'Location': 'your/404/path.html'
//add other headers here...
});
response.end();
Location: /y te redirigirá a la carpeta raíz.
'Location': '/path/to/my/servers/content'
Es posible utilizar:
res.redirect('your/404/path.html');
Para indicar un archivo / recurso faltante y servir una página 404, no es necesario que redirija. 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);
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!
res.writeHead(302, {'Location': 'https://example.com' + req.url});
res.end();
Solo considere dónde usa esto (por ejemplo, solo para solicitudes http), para que no obtenga redireccionamientos infinitos ;-)
Usé una declaración de cambio, con la predeterminada 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);
Prueba esto:
this.statusCode = 302;
this.setHeader('Location', '/url/to/redirect');
this.end();
Expressfragmento de código que OP pidió node.jscódigo puro
thisparte. En NodeJS, escribe un controlador que acepta dos parámetros (request, response)y todas esas llamadas en la respuesta están en el responseobjeto.
Tienes que usar el siguiente código:
response.writeHead(302 , {
'Location' : '/view/index.html' // This is your url which you want
});
response.end();
Use el siguiente código, esto funciona bien en Native Nodejs
http.createServer(function (req, res) {
var q = url.parse(req.url, true);
if (q.pathname === '/') {
//Home page code
} else if (q.pathname === '/redirect-to-google') {
res.writeHead(301, { "Location": "http://google.com/" });
return res.end();
} else if (q.pathname === '/redirect-to-interal-page') {
res.writeHead(301, { "Location": "/path/within/site" });
return res.end();
} else {
//404 page code
}
res.end();
}).listen(8080);