【发布时间】:2019-07-29 14:25:15
【问题描述】:
有什么办法,如何迭代我们通过@Query()注解在控制器中得到的对象?
我们在 GET 中有查询参数的动态计数和名称,因此我们需要获取整个 @Query() 对象并遍历它们以了解我们究竟拥有哪些参数。
但是如果我想迭代那个对象,我会得到一个错误,那个对象是不可迭代的。
知道怎么做吗?
【问题讨论】:
标签: javascript node.js typescript nestjs
有什么办法,如何迭代我们通过@Query()注解在控制器中得到的对象?
我们在 GET 中有查询参数的动态计数和名称,因此我们需要获取整个 @Query() 对象并遍历它们以了解我们究竟拥有哪些参数。
但是如果我想迭代那个对象,我会得到一个错误,那个对象是不可迭代的。
知道怎么做吗?
【问题讨论】:
标签: javascript node.js typescript nestjs
在嵌套控制器中,使用@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 ...
}
参考:
// 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']
* ]
*/
【讨论】:
您可以使用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)) {}。