Для переадресации применяется метод 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");