Как заставить сервер 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, и содержимым вашей HTML-страницы 404 в качестве тела ответа. Вот пример кода, демонстрирующий это в 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-запроса), чтобы не получить бесконечные перенаправления ;-)
Я использовал оператор switch со значением по умолчанию 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);