#javascript #node.js #typescript #nestjs
#javascript #node.js #typescript #nestjs
Вопрос:
Есть ли какой-либо способ, как выполнить итерацию по объекту, который мы получили в контроллере с помощью @Query()
аннотаций?
У нас есть динамическое количество и название параметров запроса в GET, поэтому нам нужно взять весь @Query()
объект и выполнить итерацию по ним, чтобы узнать, какие параметры у нас точно есть.
Но если я хочу выполнить итерацию по этому объекту, я получаю сообщение об ошибке, что объект не может быть повторен.
Есть идеи, как это сделать?
Ответ №1:
Вы можете использовать Object.keys()
для получения массива ключей объекта запроса. Затем вы можете выполнить итерацию по этому массиву ключей:
@Get()
getHello(@Query() query) {
for (const queryKey of Object.keys(query)) {
console.log(`${queryKey}: ${query[queryKey]}`);
}
}
Комментарии:
1. Вы также могли бы использовать
Object.entries
—for (const [queryKey, queryValue] of Object.entries(query)) {}
.
Ответ №2:
В контроллере nest использование @Query()
/ @Body()
/ @Headers()
декоратора без аргумента вернет объект javascript с ключом-значением.
например:
// request url: http://example.com/path-foo/path-bar?qf=1amp;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']
* ]
*/
Комментарии:
1. Пожалуйста, предоставьте объяснение с вашим ответом.