Nodejs-url de redirection

Comment puis-je obtenir un nœud.serveur js pour rediriger les utilisateurs vers un 404.page html quand ils entrent une url non valide?

J'ai fait quelques recherches, et il semble que la plupart des résultats sont pour Express, mais je veux écrire mon serveur dans un nœud pur.js.

82
demandé sur Damjan Pavlica 2010-10-31 10:48:39

6 réponses

La logique de détermination d'une "mauvaise" url est spécifique à votre application. Il pourrait s'agir d'une erreur simple fichier introuvable ou d'autre chose si vous faites une application RESTful. Une fois que vous avez compris, l'envoi d'une redirection est aussi simple que:

response.writeHead(302, {
  'Location': 'your/404/path.html'
  //add other headers here...
});
response.end();
149
répondu Chetan Sastry 2010-10-31 07:57:19

, Il est possible d'utiliser:

res.redirect('your/404/path.html');
55
répondu Daniël W. Crompton 2013-09-28 23:23:17

Pour indiquer un fichier/ressource manquant et servir une page 404, vous n'avez pas besoin de rediriger. Dans la même requête, 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 comme corps de réponse. Voici l'exemple de code pour le démontrer 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
répondu Chandra Sekar S 2010-11-03 06:32:22

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 seulement pour la requête http), de sorte que vous n'obtenez pas de redirections sans fin; -)

7
répondu Levit 2014-12-22 07:14:52

Essayez ceci:

this.statusCode = 302;
this.setHeader('Location', '/url/to/redirect');
this.end();
5
répondu Mike 2015-05-28 15:58:53

J'ai utilisé une instruction switch, avec la valeur par défaut comme un 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);
5
répondu Alon and Idan 2016-10-04 15:28:02