Як змусити сервер node.js перенаправити користувачів на сторінку 404.html, коли вони вводять недійсну URL-адресу?
Я здійснив пошук, і, схоже, більшість результатів призначено для Express, але я хочу написати свій сервер у чистому node.js.
Як змусити сервер node.js перенаправити користувачів на сторінку 404.html, коли вони вводять недійсну URL-адресу?
Я здійснив пошук, і, схоже, більшість результатів призначено для Express, але я хочу написати свій сервер у чистому node.js.
Відповіді:
Логіка визначення "неправильної" URL-адреси є специфічною для вашої програми. Це може бути проста помилка файлу, яку не знайдено, або щось інше, якщо ви робите програми RESTful. Після того як ви це зрозуміли, надіслати переспрямування так само просто, як:
response.writeHead(302, {
'Location': 'your/404/path.html'
//add other headers here...
});
response.end();
Location: /і це перенаправить вас до кореневої папки.
'Location': '/path/to/my/servers/content'
Можна використовувати:
res.redirect('your/404/path.html');
Щоб вказати на відсутній файл / ресурс та обслуговувати сторінку 404, вам не потрібно переадресовувати. У цьому ж запиті ви повинні генерувати відповідь з кодом статусу, встановленим на 404, та вмістом вашої сторінки 404 HTML як органу відповіді. Ось зразок коду, щоб продемонструвати це в 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();
Подумайте, де ви це використовуєте (наприклад, лише для запиту http), щоб не отримати нескінченних переадресацій ;-)
Я використовував оператор перемикання, за замовчуванням як 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);
Спробуйте це:
this.statusCode = 302;
this.setHeader('Location', '/url/to/redirect');
this.end();
Expressфрагмент коду OP, який просив чистий node.jsкод
thisчастини. У NodeJS ви пишете обробник, який приймає два параметри, (request, response)і всі ці виклики у відповіді є на responseоб'єкті.
Ви повинні використовувати наступний код:
response.writeHead(302 , {
'Location' : '/view/index.html' // This is your url which you want
});
response.end();
Використовуйте наступний код, який добре працює у 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);