web-dev-qa-db-fra.com

Nodejs - URL de redirection

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.

101
nXqd

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();
168
Chetan Sastry

Il est possible d'utiliser:

res.redirect('your/404/path.html');
68
Daniël W. Crompton

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);
16
Chandra Sekar

404 avec contenu/corps

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!

Rediriger vers http s

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

Considérez simplement vous utilisez ceci (par exemple, uniquement pour les requêtes http), afin de ne pas obtenir de redirections sans fin ;-)

9
Levit

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);
7
Alon and Idan

Essaye ça:

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

Vous devez utiliser le code suivant:

response.writeHead(302 , {
           'Location' : '/view/index.html' // This is your url which you want
        });
response.end();
0
Arash Keivan