Co zrobić, aby serwer node.js przekierowywał użytkowników do strony 404.html, gdy wprowadzą nieprawidłowy adres URL?
Wyszukałem trochę i wygląda na to, że większość wyników dotyczy Express, ale chcę napisać mój serwer w czystym pliku node.js.
Co zrobić, aby serwer node.js przekierowywał użytkowników do strony 404.html, gdy wprowadzą nieprawidłowy adres URL?
Wyszukałem trochę i wygląda na to, że większość wyników dotyczy Express, ale chcę napisać mój serwer w czystym pliku node.js.
Odpowiedzi:
Logika określania „złego” adresu URL jest specyficzna dla Twojej aplikacji. Może to być prosty błąd „Nie znaleziono pliku” lub coś innego, jeśli robisz aplikację RESTful. Gdy już to zrozumiesz, wysłanie przekierowania jest tak proste, jak:
response.writeHead(302, {
'Location': 'your/404/path.html'
//add other headers here...
});
response.end();
Location: /a przekieruje Cię do folderu głównego.
'Location': '/path/to/my/servers/content'
Możliwe jest użycie:
res.redirect('your/404/path.html');
Aby wskazać brakujący plik / zasób i udostępnić stronę 404, nie musisz przekierowywać. W tym samym żądaniu należy wygenerować odpowiedź z kodem stanu ustawionym na 404 i treścią strony 404 HTML jako treścią odpowiedzi. Oto przykładowy kod pokazujący to w 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();
Zastanów się tylko, gdzie tego używasz (np. Tylko dla żądania http), aby nie otrzymywać niekończących się przekierowań ;-)
Użyłem instrukcji switch, z wartością domyślną 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);
Spróbuj tego:
this.statusCode = 302;
this.setHeader('Location', '/url/to/redirect');
this.end();
Expressfragment kodu OP proszony o czysty node.jskod
thisczęści. W NodeJS piszesz program obsługi, który akceptuje dwa parametry, (request, response)a wszystkie wywołania w odpowiedzi są naresponse obiektu.
Musisz użyć następującego kodu:
response.writeHead(302 , {
'Location' : '/view/index.html' // This is your url which you want
});
response.end();
Użyj następującego kodu, który działa dobrze w 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);