Express параметры маршрута по сравнению с параметрами HTTP-запроса - PullRequest
1 голос
/ 01 августа 2020

Мне всегда было интересно, что это за обозначения,

GET /user/:name/books/:title

и как их интерпретировать до недавнего времени, когда я узнал, что они имеют форму Express route, а те, которые имеют ":", являются параметрами Express маршрута.

Итак, возникает вопрос, на который я не нашел ответов, скажем,

Вопрос в том, что, если большинство или даже все параметры необязательны? Как справиться с этим с помощью маршрута Express?

Проблема заключается в параметрах HTTP-запроса, например

https://example.org/?page=2&limit=3&sort=price

Порядок параметров запроса может быть произвольным, тогда как для маршрута Express мне кажется, что параметры маршрута должны быть указаны в очень жестком порядке / порядке. Так что, если все параметры маршрута необязательны, а мне просто нужно указать последний? (независимо от того, как вы расставляете заказы параметров маршрута, всегда будет последний)

Я действительно узнал, что Express может справиться с querystring.parse(parsedUrl.query), но причина, по которой я задаю этот вопрос, действительно из-за этого - https://github.com/gofiber/docs/blob/master/original/routing.md#parameters

Т.е., gofiber следует / использует Express соглашение о маршрутизации для обработки параметров маршрута, и мне нужно, чтобы все параметры маршрута были необязательными.

Как с этим бороться?

1 Ответ

1 голос
/ 01 августа 2020

Каждая переменная, которую вы отправляете в URL-адресе с :, принимается с req.params

Это свойство является объектом, содержащим свойства, сопоставленные с именованным маршрутом «параметры» . Например, если у вас есть маршрут / пользователь /: имя, тогда свойство «имя» доступно как req.params.name. По умолчанию этот объект имеет значение {}.

// will be available in route in req.params object
router.get('/somepath/with/:variable', (req ,res) => {
  console.log(req.params.variable);
});

Каждая переменная, которую вы отправляете в URL после ? (параметры запроса), будет доступна в req.query

Это свойство представляет собой объект, содержащий свойство для каждого параметра строки запроса в маршруте. Когда синтаксический анализатор запросов отключен, это пустой объект {}, в противном случае он является результатом настроенного синтаксического анализатора запроса.

// will be available in route in req.query object
router.get('/somepath/with/variables?page=2&limit=3&sort=price', (req ,res) => {
  console.log(req.query.page);
  console.log(req.query.limit);
  console.log(req.query.sort);
});

все данные, которые вы отправляете через ajax или формы или что-то в этом роде будет получено с помощью req.body

Содержит пары ключ-значение данных, представленных в теле запроса. По умолчанию он не определен и заполняется, когда вы используете промежуточное ПО для анализа тела, такое как express. json () или express .urlencoded ().

// will be available in route in req.body object
router.get('/somepath/with/variables', (req ,res) => {
  // send in request body like for example form data:
  console.log(req.body.variable1) // i.e
});

Это это три объекта, которые собирают данные тремя разными способами. Вам нужно просто выбрать то, что подходит для вашей сцены. Я думаю, что параметры маршрута - неправильный вариант, и вам следует go с req.query, когда переменные прибывают случайным образом, но вы должны знать, как обрабатывать их, как только они будут проанализированы в соответствующем объекте.

Надеюсь Я понял вопрос и уточнил.

...