Как отправлять целые числа в параметрах запроса в nodejs Express service

У меня на моем ящике веб-сервер nodejs express. Я хочу отправить запрос на получение вместе с параметрами запроса. Есть ли способ найти тип каждого параметра запроса, например int, bool, string. Значение ключа параметров запроса мне неизвестно. Я интерпретирую как объект json ключевых пар значений на стороне сервера.

Ответы

Ответ 1

Вы не можете, поскольку HTTP не имеет понятия типов: все это строка, включая параметры запроса.

Что вам нужно сделать, так это использовать объект req.query и вручную преобразовать строки в целые числа, используя parseInt():

req.query.someProperty = parseInt(req.query.someProperty);

Ответ 2

Вы также можете попробовать

var someProperty = (+req.query.someProperty);

Это сработало для меня!

Ответ 3

Как уже упоминалось Paul Mougel, HTTP-запрос и переменные пути являются строками. Однако они могут быть перехвачены и изменены до их обработки. Я делаю это так:

var convertMembershipTypeToInt = function (req, res, next) {
  req.params.membershipType = parseInt(req.params.membershipType);
  next();
};

перед:

router.get('/api/:membershipType(\\d+)/', api.membershipType);

после

router.get('/api/:membershipType(\\d+)/', convertMembershipTypeToInt, api.membershipType);

В этом случае req.params.membershipType преобразуется из строки в целое. Обратите внимание на регулярное выражение, чтобы гарантировать, что в преобразователь передаются только целые числа.

Ответ 4

Возможно, это поможет любой, кто прочитает это, но мне нравится использовать функции стрелок, чтобы мой код был чистым. Поскольку все, что я делаю, это изменение одной переменной, она должна принимать только одну строку кода:

module.exports = function(repo){

  router.route('/:id,
  (req, res, next) => { req.params.id = parseInt(req.params.id); next(); })
    .get(repo.getById)
    .delete(repo.deleteById)
    .put(repo.updateById);
}