如何在 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中将对象从服务器端传递到客户端

CORS“允许凭据”Nodejs/Express

mongodb 连接如何处理 NodeJS express 服务器中的并发请求?

nodejs中的express啥意思

无法使用 NodeJS 中的 request 和 express 模块在浏览器中设置 cookie