Переадресация

Последнее обновление: 23.11.2013

Для переадресации применяется метод redirect():

redirect([status,] path)

В качестве параметра path передается путь, на который будет перенаправляться пользователь. Дополнительный параметр status задает статусный код переадресации. Если этот параметр не задан, тогда по умолчанию отправляется статусный код 302, который предполагает временную переадресацию.

С помощью данного метода можно выполнять переадресацию как по относительным путям, так и по абсолютным, в том числе на другие домены.

Переадресация по абсолютному пути:

const express = require("express");
const app = express();

app.use("/index",function (_, response) {
  response.redirect("https://metanit.com")
});

app.listen(3000);

В данном случае при обращении по пути "/index" будет идти переадресация на сайт https://metanit.com.

Переадресация по оносительным путям также не очень сложна, но здесь важно учитывать, как именно определяется адрес для редиректа. Рассмотрим редирект относительно текущего пути, с которого производится редирект. Например:

const express = require("express");
const app = express();

app.use("/home",function (_, response) {
  response.redirect("about")
});
app.use("/about", function (_, response) {
  response.send("<h1>About</h1>");
});

app.listen(3000);

В данном случае будет идти перенаправление с ресурса "/home" на ресурс "/about", то есть, условно говоря, с http://localhost:3000/home на http://localhost:3000/about.

Теперь рассмотрим похожий пример:

const express = require("express");
const app = express();

app.use("/home/bar",function (_, response) {
  response.redirect("about")
});
app.use("/home/about", function (_, response) {
  response.send("<h1>About</h1>");
});

app.listen(3000);

Здесь с ресурса "/home/bar" также идет переадресация на ресурс "about", однако в реальности теперь это будет не http://localhost:3000/about, а http://localhost:3000/home/about. То есть мы как-бы поднимаемся на один уровень вверх - с "home/bar" на "home/" и затем к нему добавляется "about".

Если нам необходимо выполнить переадресацию не относительно текущего ресурса, а относительно корневого каталога приложения, то в начале адреса ставится слеш:

const express = require("express");
const app = express();

app.use("/home/bar",function (_, response) {
  response.redirect("/about")
});
app.use("/about", function (_, response) {
  response.send("<h1>About</h1>");
});

app.listen(3000);

Еще несколько примеров. Переадресация относительно текущего адреса на адрес на том же уровне:

app.use("/home/foo/bar",function (_, response) {
  response.redirect("./about")
});

Здесь идет переадресация с http://localhost:3000/home/foo/bar на http://localhost:3000/home/foo/about

Переадресация на адрес, который располагается уровнем выше:

app.use("/home/foo/bar",function (_, response) {
  response.redirect("../about")
});

Здесь идет переадресация с http://localhost:3000/home/foo/bar на http://localhost:3000/home/about

Переадресация на уровень выше:

app.use("/home/foo/bar",function (_, response) {
  response.redirect(".")
});

Здесь идет переадресация с http://localhost:3000/home/foo/bar на http://localhost:3000/home/foo

Переадресация на два уровня выше:

app.use("/home/foo/bar",function (_, response) {
  response.redirect("..")
});

Здесь идет переадресация с http://localhost:3000/home/foo/bar на http://localhost:3000/home

По умолчанию при редиректе передается статусный код 302, который указывает, что ресурс временно доступен по новому адресу. Но мы можем указать статусный код 301, чтобы сделать переадресацию постоянной:

response.redirect(301, "/about");
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850