Comment faire en sorte qu'un serveur node.js redirige les utilisateurs vers une page 404.html lorsqu'ils entrent une adresse URL non valide?
J'ai fait quelques recherches et il semble que la plupart des résultats concernent Express, mais je veux écrire mon serveur dans pure node.js.
La logique de détermination d'une "mauvaise" URL est spécifique à votre application. Cela pourrait être un simple fichier non trouvé d'erreur ou autre chose si vous faites une application RESTful. Une fois que vous avez compris cela, envoyer une redirection est aussi simple que:
response.writeHead(302, {
'Location': 'your/404/path.html'
//add other headers here...
});
response.end();
Il est possible d'utiliser:
res.redirect('your/404/path.html');
Pour indiquer un fichier/une ressource manquant (e) et servir une page 404, vous n'avez pas besoin de rediriger. Dans la même demande, vous devez générer la réponse avec le code d'état défini sur 404 et le contenu de votre page HTML 404 en tant que corps de réponse. Voici l'exemple de code pour illustrer cela dans 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();
Considérez simplement où vous utilisez ceci (par exemple, uniquement pour les requêtes http), afin de ne pas obtenir de redirections sans fin ;-)
J'ai utilisé une instruction switch, avec la valeur par défaut comme 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);
Essaye ça:
this.statusCode = 302;
this.setHeader('Location', '/url/to/redirect');
this.end();
Vous devez utiliser le code suivant:
response.writeHead(302 , {
'Location' : '/view/index.html' // This is your url which you want
});
response.end();