如何在Nest JS中迭代@Query()对象

时间:2019-03-07 16:08:55

标签: javascript node.js typescript nestjs

有什么办法,如何通过@Query()注释遍历我们在控制器中获得的对象?

我们在GET中具有动态计数和查询参数的名称,因此我们需要获取整个@Query()对象并对其进行迭代以了解我们确切拥有的paramas。

但是如果我要遍历该对象,则会收到错误消息,指出该对象不可迭代。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

您可以使用(() => { return this._visible ? '' : null; }) 获取查询对象的键数组。然后,您可以遍历以下键数组:

Object.keys()

答案 1 :(得分: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']
     * ]
     */