【问题标题】:How to iterate over @Query() object in Nest js如何在 Nest js 中迭代 @Query() 对象
【发布时间】:2019-07-29 14:25:15
【问题描述】:

有什么办法,如何迭代我们通过@Query()注解在控制器中得到的对象?

我们在 GET 中有查询参数的动态计数和名称,因此我们需要获取整个 @Query() 对象并遍历它们以了解我们究竟拥有哪些参数。

但是如果我想迭代那个对象,我会得到一个错误,那个对象是不可迭代的。

知道怎么做吗?

【问题讨论】:

    标签: javascript node.js typescript nestjs


    【解决方案1】:

    在嵌套控制器中,使用@Query() / @Body() / @Headers() 没有参数的装饰器 将返回一个键值 JavaScript 对象。

    例如:

        // request url: http://example.com/path-foo/path-bar?qf=1&qb=2
    
        @Post(':foo/:bar')
        async function baz(@Query() query,@Param() param) {
            const keys = Object.keys(query); // ['qf', 'qb']
            const vals = Object.values(query); // ['1', '2']
            const pairs = Object.entries(query); // [['qf','1'],['qb','2']]
            const params = Object.entries(param); // [['foo','path-foo'],['bar','path-bar']]
            // these are all iterate able array
            // so you can use any Array's built-in function
            // e.g. for / forEach / map / filter ...
        }
    

    参考:

    Object

    Object.keys()

    Object.values()

    Object.entries()

        // sample object
        const obj = {
          foo: 'this is foo',
          bar: 'this is bar',
          baz: 'this is baz',
        };
    
        Object.keys(obj);
        Object.values(obj);
        Object.entries(obj);
    
        /**
         * return iterable array:
         *
         * ['foo', 'bar', 'baz']
         *
         * ['this is foo', 'this is bar', 'this is baz']
         *
         * [
         *     ['foo', 'this is foo']
         *     ['bar', 'this is bar']
         *     ['baz', 'this is baz']
         * ]
         */
    

    【讨论】:

    • 请在您的回答中提供解释。
    【解决方案2】:

    您可以使用Object.keys() 获取查询对象的键数组。然后你可以遍历这个键数组:

    @Get()
    getHello(@Query() query) {
      for (const queryKey of Object.keys(query)) {
        console.log(`${queryKey}: ${query[queryKey]}`);
      }
    }
    

    【讨论】:

    • 你也可以使用Object.entries - for (const [queryKey, queryValue] of Object.entries(query)) {}
    猜你喜欢
    • 2022-10-12
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    相关资源
    最近更新 更多