我的盒子上运行了一个nodejs express web服务器。我想发送一个get请求以及查询参数。有没有办法找到每个查询参数的类型,如int,bool,string。我不知道查询参数键值。我在服务器端解释为键值对的json对象。
答案 0 :(得分:27)
你不能,因为HTTP没有类型的概念:一切都是字符串,包括查询字符串参数。
您需要做的是使用req.query
object并使用parseInt()
手动将字符串转换为整数:
req.query.someProperty = parseInt(req.query.someProperty);
答案 1 :(得分:9)
您也可以尝试
var someProperty = (+req.query.someProperty);
这对我有用!
答案 2 :(得分:6)
如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从字符串转换为整数。请注意正则表达式以确保只将整数传递给转换器。
答案 3 :(得分:0)
let originalType = JSON.parse(req.query.someproperty);
在 HTTP 中,无论您最初发送的是 [0,1]
还是 5
或 "hello"
,查询字符串参数都被视为字符串。
所以我们必须使用json解析来解析它。
答案 4 :(得分:-1)
对于那些阅读此内容的人来说,这可能会有任何帮助,但我喜欢使用箭头功能来保持我的代码干净。因为我所做的只是更改一个变量,所以只需要一行代码:
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);
}