如何在 nodejs Express 服务中的查询参数中发送整数
Posted
技术标签:
【中文标题】如何在 nodejs Express 服务中的查询参数中发送整数【英文标题】:How to send integers in query parameters in nodejs Express service 【发布时间】:2013-12-19 18:56:15 【问题描述】:我有一个 nodejs express web 服务器在我的盒子上运行。我想连同查询参数一起发送一个获取请求。有没有办法找到每个查询参数的类型,如 int、bool、string。我不知道查询参数键值。我在服务器端解释为键值对的 json 对象。
【问题讨论】:
你可以在get请求中发送一个json对象,比如http://domain.com?json="key":intValue
,然后用JSON.parse(req.json)
将query param json的值解析成一个JSON对象
【参考方案1】:
很久以前就已经回答了这个问题,但是有一种解决方法可以使用 3rd 方库 express-query-parser 将查询参数作为字符串解析为正确的类型
// without this parser
req.query = a: 'null', b: 'true', c: d: 'false', e: '3.14'
// with this parser
req.query = a: null, b: true, c: d: false, e: 3.14
【讨论】:
【参考方案2】://你可以这样使用
让 page_number : any = req.query;
page_number = +page_number;
【讨论】:
一个好的答案将始终包括解释为什么这会解决问题,以便 OP 和任何未来的读者可以从中学习。【参考方案3】:let originalType = JSON.parse(req.query.someproperty);
在 HTTP 中,无论您最初发送的是 [0,1]
、5
还是 "hello"
,查询字符串参数都被视为字符串。
所以我们必须使用json解析来解析它。
【讨论】:
【参考方案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);
【讨论】:
注意不要以牺牲可读性为代价“清理”你的代码。【参考方案5】:你也可以试试
var someProperty = (+req.query.someProperty);
这对我有用!
【讨论】:
【参考方案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 从字符串转换为整数。注意正则表达式以确保只有整数被传递给转换器。
【讨论】:
我认为这个解决方案会引发打字稿错误,因为 req.params 被定义为map: [key: string]: string;
,因此您不能将整数分配给字符串值。我对此感到非常兴奋,因为它可以被每个接受id
作为路径参数的get
端点重用【参考方案7】:
你不能,因为 HTTP 没有类型的概念:一切都是字符串,包括查询字符串参数。
您需要做的是使用req.query
object 并使用parseInt()
手动将字符串转换为整数:
req.query.someProperty = parseInt(req.query.someProperty);
【讨论】:
是否有任何其他方式,例如自定义标头或我可以将查询参数作为 json 对象发送的方式。 我们遇到了类似的要求,需要在获取请求中发送 JSON。我们最终改用 POST... 是的,POST 对于执行 GET 来说听起来很奇怪,但这是绕过它的一种方法。以上是关于如何在 nodejs Express 服务中的查询参数中发送整数的主要内容,如果未能解决你的问题,请参考以下文章
如何从同一网络中的另一台计算机访问我的 nodejs-express localhost 服务器?
如何使用express [重复]在nodejs中将对象从服务器端传递到客户端