Получение строк и параметров запроса в Express.js

* Введение * Извлечение параметров запроса * Извлечение параметров запроса без Express * Извлечение параметров маршрута * Заключение Введение Мы рассмотрим, как извлекать информацию из URL-адреса в Express.js. В частности, как мы извлекаем информацию из строки запроса и как извлекаем информацию из параметров пути URL? В этой статье я предполагаю, что у вас есть некоторый опыт работы с Node.js и создания серверов Express.js [http://expressjs.com/] (или, по крайней мере, простых

Вступление

Мы рассмотрим, как извлечь информацию из URL-адреса в Express.js. В частности, как мы извлекаем информацию из строки запроса и как извлекаем информацию из параметров пути URL?

В этой статье я предполагаю, что у вас есть некоторый опыт работы с Node.js и создания серверов Express.js (или, по крайней мере, простых). Остальное мы объясним в статье.

Извлечение параметров запроса

Прежде чем мы начнем, было бы полезно сначала понять, что такое строка / параметр запроса, а затем мы поговорим о том, как с ними работать.

Итак, что такое параметр запроса ?

Проще говоря, строка запроса - это часть URL-адреса (Uniform Resource Locater) после вопросительного знака (?). Он предназначен для отправки небольшого количества информации на сервер через URL-адрес. Эта информация обычно используется в качестве параметров для запроса к базе данных или, возможно, для фильтрации результатов. Вам действительно решать, для чего они используются.

Вот пример URL-адреса с прикрепленными строками запроса:

 https://stackabuse.com/?page=2&limit=3 

Параметры запроса представляют собой фактические пары ключ-значение , как page и limit со значениями 2 и 3 , соответственно.

Теперь перейдем к первой основной цели этой статьи - как извлечь их из нашего объекта экспресс-запроса .

Это довольно распространенный вариант использования в Express и на любом HTTP-сервере, поэтому, надеюсь, приведенные здесь примеры и объяснения понятны.

Теперь возьмем тот же пример сверху:

 https://stackabuse.com/?page=2&limit=3 

Мы хотели бы извлечь параметры page и limit чтобы знать, какие статьи возвращать на страницу, запрошенную пользователем. Хотя параметры запроса обычно используются в GET , их все еще можно увидеть в POST и DELETE , среди прочего.

Параметры запроса можно получить из объекта query объекте запроса, отправленном на ваш маршрут. Он находится в форме объекта, в котором вы можете напрямую обращаться к интересующим вас параметрам запроса. В этом случае Express обрабатывает весь синтаксический анализ URL за вас и предоставляет извлеченные параметры как этот объект.

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

 const express = require('express'); 
 const bodyParser = require('body-parser'); 
 const url = require('url'); 
 const querystring = require('querystring'); 
 const Article = require('./models').Article; 
 
 let app = express(); 
 app.use(bodyParser.urlencoded({ extended: false })); 
 app.use(bodyParser.json()); 
 
 // Function to handle the root path 
 app.get('/', async function(req, res) { 
 
 // Access the provided 'page' and 'limt' query parameters 
 let page = req.query.page; 
 let limit = req.query.limit; 
 
 let articles = await Article.findAll().paginate({page: page, limit: limit}).exec(); 
 
 // Return the articles to the rendering engine 
 res.render('index', { 
 articles: articles 
 }); 
 }); 
 
 let server = app.listen(8080, function() { 
 console.log('Server is listening on port 8080') 
 }); 

В приведенном выше примере мы предполагаем, что параметры page и limit всегда существуют. Если ни один из этих параметров не указан в URL-адресе, вместо этого undefined для page и limit

Извлечь параметры запроса без Express

В качестве быстрого бонуса я хотел показать вам, как выполнить фактический синтаксический анализ самостоятельно, если вам нужно извлечь информацию из URL-адреса, который не использует Express или любую другую веб-платформу. Довольно распространено создание чрезвычайно простого сервера с использованием http , так что это полезно знать.

К счастью для вас, Node.js уже предоставляют некоторые большие основные библиотеки , которые имеют эту функциональность встроенную, так что это просто вопрос require -ную модуль и вызов несколько строк коды.

Вот пример использования пакетов querystring и url.

 const url = require('url'); 
 const querystring = require('querystring'); 
 
 let rawUrl = 'https://stackabuse.com/?page=2&limit=3'; 
 
 let parsedUrl = url.parse(rawUrl); 
 let parsedQs = querystring.parse(parsedUrl.query); 
 
 // parsedQs = { page: '2', limit: '3' } 

Вы можете видеть в этом коде, что нам требуется два шага синтаксического анализа, чтобы получить желаемые результаты.

Давайте разберемся немного дальше и покажем, что именно происходит на каждом этапе. После вызова url.parse(rawUrl) для нашего URL-адреса нам возвращается следующее:

 { 
 protocol: 'https:', 
 slashes: true, 
 auth: null, 
 host: 'stackabuse.com', 
 port: null, 
 hostname: 'stackabuse.com', 
 hash: null, 
 search: '?page=2&limit=3', 
 query: 'page=2&limit=3', 
 pathname: '/', 
 path: '/?page=2&limit=3', 
 href: 'https://stackabuse.com/?page=2&limit=3' 
 } 

Хорошо, мы немного приблизились к получению необходимых данных. Но это нужно еще раз разбить. Мы можем сделать это, используя querystring для анализа фактической строки запроса. Например:

 let parsedQs = querystring.parse(parsedUrl.query); 

И, наконец, наш parsedQs содержит следующее:

 { 
 page: '2', 
 limit: '3' 
 } 

Извлечение параметров маршрута

В любом веб-приложении еще одним распространенным способом структурирования URL-адресов является размещение информации внутри фактического пути URL-адреса, который в Express просто называется параметрами маршрута. Мы можем использовать их для структурирования веб-страниц по информации / данным, что особенно полезно в REST API.

Извлечение этих параметров маршрута аналогично параметрам запроса. Все, что мы делаем, это берем req и получаем наши параметры из объекта params Довольно просто, правда?

Давайте посмотрим на пример этого в нашем экспресс-маршруте:

 // Route to return all articles with a given tag 
 app.get('/tag/:id', async function(req, res) { 
 
 // Retrieve the tag from our URL path 
 var id = req.params.id; 
 
 let articles = await Article.findAll({tag: id}).exec(); 
 
 res.render('tag', { 
 articles: articles 
 }); 
 }); 

Первое, на что следует обратить внимание, это то, что мы сообщаем Express, что наш маршрут - это /tag/:id , где :id - это заполнитель для чего угодно. Это может быть строка или число. Таким образом, все, что передается в этой части пути, устанавливается как параметр id

Если бы нам нужно было перейти по URL-адресу https://stackabuse.com/tag/node тогда id был бы node , и мы получили бы кучу статей с node на них. И req.params в этом случае будет {id: 'node'} , как и объект query

Как видите, мы снова просто берем наш параметр непосредственно из объекта, содержащегося в объекте запроса.

Заключение

В этой статье я представил способы извлечения как параметров строки запроса, так и параметров пути маршрута URL-адреса в веб-платформе Express. Вот краткое описание того, как извлечь параметры, о которых мы говорили:

  • req.query : прямой доступ к параметрам проанализированной строки запроса
  • req.params : прямой доступ к анализируемым параметрам маршрута из пути

Хотя на самом деле процесс получения этих данных очень прост, понимание того, откуда эта информация и что это за информация, может сбивать с толку некоторых новичков. Надеюсь, эта статья прояснила для вас некоторые вещи. Не стесняйтесь сообщить нам в комментариях, если что-то неясно.

comments powered by Disqus