Nodejs - URL-адрес перенаправления



Как мне получить узел.JS-сервер для перенаправления пользователей на 404.html-страница, когда они вводят недопустимый url-адрес?



Я сделал некоторый поиск, и похоже, что большинство результатов для Express, но я хочу написать свой сервер в чистом узле.js.

636   6  

6 ответов:

логика определения "неправильного" url специфична для вашего приложения. Это может быть простой файл не найден ошибка или что-то еще, если вы делаете спокойного приложения. Как только вы это поняли, отправка перенаправления так же просто, как:

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

можно использовать:

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

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

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!

перенаправление на Https

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

просто считать здесь вы используете это (например, только для http-запроса), поэтому вы не получаете бесконечные перенаправления ; -)

попробуйте это:

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

я использовал оператор 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);

Comments

    Ничего не найдено.