NestJS проблема с парсингом данных из query запроса
Почему то у меня неправильно парсятся данные из query запроса.
Что бы не тащить кучу кода, я убрал всё лишнее оставив лишь саму проблемную часть.
У меня есть простейший get запрос
http://localhost:3002/test?filter[15][]=1
И есть роут который его обрабатывает
@Get('test')
test(@Query() query) {
return query;
}
Больше никакого кода нет.
Почему то, при запросе
http://localhost:3002/test?filter[15][]=1
значение 15 теряется и возвращается результат
{ filter: [ [ '1' ] ] }
а если указать в скобках filter значение больше 20, например
http://localhost:3002/test?filter[21][]=1
то тогда возвращается правильное значение
{ filter: { '21': [ '1' ] } }
Если кто может, подскажите пожалуйста, почему так происходит, и как это можно поправить что бы в запросах всегда был вывод как во втором результате. Спасибо.
Ответы (1 шт):
Удалось решить проблему, хоть способ и немного костыльный, но работает нормально.
Библиотека qs под капотом сама неявным образом преобразует массивы у которых есть индексы больше 20 в объекты. Что бы исправить это, нужно самому передать в парсер изначальную строку запроса и в параметрах установить ограничение на максимальный индекс на 0.
import { parse } from 'qs';
@Get('test')
test(@Req() req: Request) {
return parse(req.url.replace(/.*\?/, ''), { arrayLimit: 0 })
}
После этого, запрос отрабатывает полностью корректно.