Как отправлять целые числа в параметрах запроса в 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);
}