Nodejs - URL'yi yeniden yönlendir


118

Geçersiz bir url girdiklerinde kullanıcıları bir 404.html sayfasına yönlendirecek bir node.js sunucusunu nasıl edinebilirim?

Biraz arama yaptım ve sonuçların çoğu Express için gibi görünüyor, ancak sunucumu saf node.js'de yazmak istiyorum.


1
Önceden uygulamamın saf node.js'de daha iyi olduğuna inanırdım, ancak express'i yükledikten sonra ÇOK mutlu oldum. Şimdi ifade etmeden bir düğüm SPA / RESTful web servis mimarisi hayal edemiyorum.
Graham

Yanıtlar:


193

"Yanlış" bir url belirleme mantığı uygulamanıza özeldir. Bir RESTful uygulaması yapıyorsanız, basit bir dosya bulunamadı hatası veya başka bir şey olabilir. Bunu anladıktan sonra, yönlendirme göndermek şu kadar basittir:

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

404 html sayfamı göstermiyor, belki sadece başlığı gösteriyor.
Dzung Nguyen

7
@Magic Doğru değil. Deneyin Location: /ve sizi kök klasöre yönlendirir.
user3459110

Awal ile anlaştı. Ben kullanıyorum'Location': '/path/to/my/servers/content'
Millie Smith

73

Kullanmak mümkündür:

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

73
Yalnızca ekspres olarak. Yerel node.js uygulamasında değil.
Sergey Yarotskiy

@TarunG Yorumunuz için teşekkürler, sorunun düzenleme geçmişine bakarsanız, bunun her zaman çok net olmadığını görürsünüz.
Daniël W. Crompton

2
Benim durumumda res.redirect ('/ login'), yapılan ajax çağrısının yanıtı olarak sadece login.html içeriğini gönderir. Sayfayı nasıl açmayı tercih ederim?
Tarun

Eski gönderi, ancak belki res.direct (' localhost: 5000 / login' ) gibi bir şey arıyorsunuz , özellikle de ekspres sunucunuzu benim olduğum gibi ön uçtan farklı bir bağlantı noktasında çalıştırıyorsanız.
jboxxx

18

Eksik bir dosyayı / kaynağı belirtmek ve bir 404 sayfası sunmak için yeniden yönlendirmenize gerek yoktur. Aynı istekte, durum kodu 404 olarak ayarlanmış ve yanıt gövdesi olarak 404 HTML sayfanızın içeriği ile yanıtı oluşturmalısınız. İşte bunu Node.js'de göstermek için örnek kod.

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);

10

İçerik / Gövde ile 404

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!

Http yönlendir ler

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

Sadece bunu nerede kullandığınızı düşünün (örneğin sadece http isteği için), böylece sonsuz yeniden yönlendirmeler almazsınız ;-)


7

Varsayılan 404 olan bir switch deyimi kullandım:

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

Bunu dene:

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

1
Bu muhtemelen Expresssaf node.jskod için sorulan bir kod parçacığıdır
Refael Ackermann

Ekspres kod değil. Bu, thisparça dışında vanilya Düğüm koduna benziyor . NodeJS'de iki parametreyi kabul eden bir işleyici yazarsınız ve yanıttaki (request, response)tüm bu çağrılar responsenesne üzerindedir.
AlexChaffee

1

Aşağıdaki kodu kullanmanız gerekir:

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

0

Native Nodejs'de düzgün çalışan aşağıdaki kodu kullanın

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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.