Nodejs - URL перенаправления - PullRequest
       6

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

96 голосов
/ 31 октября 2010

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

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

Ответы [ 7 ]

166 голосов
/ 31 октября 2010

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

response.writeHead(302, {
  'Location': 'your/404/path.html'
  //add other headers here...
});
response.end();
65 голосов
/ 29 сентября 2013

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

res.redirect('your/404/path.html');
16 голосов
/ 03 ноября 2010

Чтобы указать отсутствующий файл / ресурс и обслуживать страницу 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);
8 голосов
/ 09 октября 2014

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 s

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

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

7 голосов
/ 04 октября 2016

Я использовал оператор 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);
5 голосов
/ 28 мая 2015

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

this.statusCode = 302;
this.setHeader('Location', '/url/to/redirect');
this.end();
0 голосов
/ 23 марта 2019

Вы должны использовать следующий код:

response.writeHead(302 , {
           'Location' : '/view/index.html' // This is your url which you want
        });
response.end();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...