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 шт):

Автор решения: Nik

Удалось решить проблему, хоть способ и немного костыльный, но работает нормально.

Библиотека qs под капотом сама неявным образом преобразует массивы у которых есть индексы больше 20 в объекты. Что бы исправить это, нужно самому передать в парсер изначальную строку запроса и в параметрах установить ограничение на максимальный индекс на 0.

import { parse } from 'qs';

@Get('test')
test(@Req() req: Request) {
  return parse(req.url.replace(/.*\?/, ''), { arrayLimit: 0 })
}

После этого, запрос отрабатывает полностью корректно.

→ Ссылка