Объект запроса в Express

Сейчас мы разберемся с возможностями объекта запроса. Для этого будем считать, что вбитый в адресную строку URL выглядит следующим образом:

http://localhost:3000/dir/page.html?get1=1&get2=2

Напишем обработчик этого урла:

app.get('/dir/page.html', function(req, res) { });

Как вы видите, в обработчике мы указываем адрес без протокола, домена и порта, а также без строки запроса. Давайте посмотрим, какую информацию о запросе мы можем получить с помощью объекта запроса.

Путь

С помощью свойства path мы можем получить запрошенный адрес без протокола, хоста, порта и строки запроса:

app.get('/dir/page.html', function(req, res) { console.log(req.path); // выведет '/dir/page.html' });

Урл

С помощью свойства url мы можем получить запрошенный адрес с путем и строкой запроса:

app.get('/dir/page.html', function(req, res) { console.log(req.url); // выведет '/dir/page.html?get1=1&get2=2' });

При этом свойство url может быть изменено Express при работе маршрутизации. Поэтому существует специальное свойство originalUrl, которое гарантированно будет содержать оригинальный урл:

app.get('/dir/page.html', function(req, res) { console.log(req.originalUrl); // выведет '/dir/page.html?get1=1&get2=2' });

Строка запроса

С помощью свойства query мы можем получить строку запроса в виде объекта с ключами и значениями:

app.get('/dir/page.html', function(req, res) { console.log(req.query); // содержит объект {get1: '1', get2: '2'} });

Давайте для примера получим значение GET параметра с именем get1:

app.get('/dir/page.html', function(req, res) { console.log(req.query.get1); // выведет '1' });

Протокол

С помощью свойства protocol мы можем получить протокол:

app.get('/dir/page.html', function(req, res) { console.log(req.protocol); // выведет 'http' });

Есть также свойство secure, которое содержит true для HTTPS протокола, и false - для обычного HTTP:

app.get('/dir/page.html', function(req, res) { console.log(req.secure); // выведет false });

Заголовки

С помощью свойства headers мы можем получить заголовки запроса:

app.get('/dir/page.html', function(req, res) { console.log(req.headers); });

Языки

С помощью свойства acceptsLanguages мы можем получить предпочитаемые пользователем языки:

app.get('/dir/page.html', function(req, res) { console.log(req.acceptsLanguages); });

IP адрес

С помощью свойства ip мы можем получить IP адрес пользователя:

app.get('/dir/page.html', function(req, res) { console.log(req.ip); });

Практические задачи

Самостоятельно опробуйте работу описанный свойств.