Как работает объект req в Express
Development, Java | Комментировать запись
Объект req (сокращение от request) составляет половину цикла request/response, который предназначен для проверки вызовов со стороны клиента, выполнения HTTP-запросов и обработки входящих данных, будь то строка или объект JSON.
В этой статье вы узнаете, как работает объект req в Express.
Требования
- Желательно иметь общее представление о том, как работает Node.js. Чтобы узнать о Node.js больше, ознакомьтесь с мануалами Как написать и запустить свою первую программу на Node.js и Использование интерактивной оболочки REPL в Node.js.
- Базовые знания об HTTP-запросах.
Управление данными на стороне клиента
Серверы Express получают данные со стороны клиента через объект req в трех экземплярах: это объекты req.params, req.query и req.body.
Объект req.params собирает данные на основе параметра, указанного в URL-адресе. Чтобы попрактиковаться, давайте предположим, что у вас есть файл index.js. Реализуйте в этом файле GET-запрос с параметром ‘/:userid’:
// GET https://example.com/user/1 app.get('/:userid', (req, res) => { console.log(req.params.userid) // "1" })
Через параметр ‘/:userid’ объект req.params сообщает Express, что ему нужно вывести идентификатор пользователя. В нашем примере GET-запрос на https://example.com/user/1 с указанным параметром регистрирует в консоли id “1”.
Чтобы получить доступ к строке запроса URL, примените объект req.query, он предназначен для поиска, фильтрации и сортировки данных. Включите в свой файл index.js GET-запрос к маршруту ‘/search’:
// GET https://example.com/search?keyword=great-white app.get('/search', (req, res) => { console.log(req.query.keyword) // "great-white" })
Объект req.query соответствует данным, загруженным со стороны клиента в условном выражении запроса. В этом примере GET-запрос к маршруту ‘/search’ сообщает Express о необходимости сопоставить ключевые слова в поисковом запросе с https://example.com. Добавив свойство .keyword к объекту req.query, мы получим в консоли результат “great-white”.
Объект req.body позволяет получать доступ к данным в строке или объекте JSON со стороны клиента. Обычно объект req.body используется для получения данных через запросы POST и PUT на сервере Express.
Давайте вернемся к файлу index.js и установим POST-запрос для маршрута ‘/login’:
// POST https://example.com/login // // { // "email": "user@example.com", // "password": "helloworld" // } app.post('/login', (req, res) => { console.log(req.body.email) // "user@example.com" console.log(req.body.password) // "helloworld" })
Когда пользователь вводит свой адрес электронной почты и пароль на стороне клиента, объект req.body сохраняет эту информацию и отправляет ее на сервер Express. Регистрация объекта req.body в консоли приводит к получению адреса электронной почты и пароля пользователя.
Итак, вы изучили основные способы реализации объекта req. Далее мы рассмотрим другие подходы к его интеграции в Express.
Изучение URL-адреса с помощью свойств req
Свойства объекта req могут возвращать части URL-адреса в зависимости от его анатомии. К этим свойствам относятся protocol, hostname, path, originalUrl и subdomains (это протокол, имя хоста, путь, исходный URL-адрес и поддомены соответственно).
Вернемся к файлу index.js и установим GET-запрос для маршрута ‘/creatures’:
// https://ocean.example.com/creatures?filter=sharks app.get('/creatures', (req, res) => { console.log(req.protocol) // "https" console.log(req.hostname) // "example.com" console.log(req.path) // "/creatures" console.log(req.originalUrl) // "/creatures?filter=sharks" console.log(req.subdomains) // "['ocean']" })
Как видите, вы можете получить доступ к различным частям URL-адреса, используя встроенные свойства объекта req.
Анализ дополнительных свойств req
Объект res включает свойства, позволяющие максимизировать количество обращений к HTTP-запросам.
Чтобы получить доступ к HTTP-методу (будь то GET, POST, PUT или DELETE), используйте свойство .method объекта req. В файле index.js можно следующим образом реализовать запрос DELETE к анонимной конечной точке:
app.delete('/', (req, res) => { console.log(req.method) // "DELETE" })
Свойство .method возвращает текущий метод HTTP-запроса. В этом случае консоль регистрирует метод DELETE.
Для анализа заголовков, отправленных на ваш сервер, добавьте к объекту req метод .header(). Задайте POST-запрос для маршрута ‘/login’ в вашем файле index.js:
app.post('/login', (req, res) => { req.header('Content-Type') // "application/json" req.header('user-agent') // "Mozilla/5.0 (Macintosh Intel Mac OS X 10_8_5) AppleWebKi..." req.header('Authorization') // "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..." })
Метод req.header() вернет тип заголовка (Content-Type и Authorization). Аргумент для req.header() нечувствителен к регистру, поэтому вы можете использовать как req.header (‘Content-Type’), так и req.header (‘content-type’) – они взаимозаменяемы.
Если вы добавили cookie-parser в качестве зависимости сервера Express, свойство req.cookies будет хранить значения из этого парсера. Вернемся в файл index.js, установим в нем экземпляр req.cookies и применим свойство sessionDate:
// Cookie sessionDate=2019-05-28T01:49:11.968Z req.cookies.sessionDate // "2019-05-28T01:49:11.968Z"
Обратите внимание на результат, возвращаемый из даты сеанса cookie при вызове из объекта req.
Заключение
Express предоставляет встроенные свойства, что позволяют объекту req быть частью цикла request для обработки HTTP-запросов и данных со стороны клиента. Рекомендуем просмотреть официальную документацию по req.
Читайте также: Как работает объект res в Express
Tags: Express, Express.js, ExpressJS