【问题标题】:How to send integers in query parameters in nodejs Express service如何在 nodejs Express 服务中的查询参数中发送整数
【发布时间】: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对象

标签: node.js express


【解决方案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 来说听起来很奇怪,但这是绕过它的一种方法。
        猜你喜欢
        • 2021-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-09
        • 1970-01-01
        相关资源
        最近更新 更多