Запросите параметры из службы A, проанализированные в непредвиденной структуре объекта в службе B, и не знаете, почему это происходит - PullRequest
0 голосов
/ 01 июня 2019

Проблема: возникла очень странная ошибка, когда наша служба A (laravel php) вызывает конечную точку службой B (nodejs typcript + ajv + nestjs). Позвольте мне объяснить это ниже.

Пример кода в службе A для построения параметров запроса

$ids = [1,2,3];
$queryParams = http_build_query(['ids' => $ids]);
dump($queryParams) 
// ids%5B0%5D=1&ids%5B1%5D=2&ids%5B2%5D=3
// b.com/bar?ids[0]=1&ids[1]=2&ids[2]=3

В службе B ожидаемые полученные параметры запроса должны быть

{ ids: [1,2,3] }

В dev он работал хорошо, код был развернут в производство, затем мы начали видеть ошибки проверки из НЕКОТОРЫХ запросов , потому что параметры запроса теперь

{ 
 ids: {
  '0' : '1',
  '1' : '2',
  '2' : '3'
 }
}

Мы уверены, что последний код развернут во всех экземплярах, так что исключается возможность различия кода в службе A , вызывающей разницу в отправляемых параметрах запроса.

Целый день провел 1 день, пытаясь выяснить первопричину, но до сих пор не получил ответов.

Вопрос: В каком формате могут быть отправлены параметры запроса для его анализа в приведенной выше структуре объекта?

1 Ответ

0 голосов
/ 07 июня 2019

Оказывается, проблема в том, что nestjs @Query decorator (который использует Express под капотом) не может правильно проанализировать параметры запроса в ожидаемый массив, если длина параметров превышает 21.

например

Массив запросов с 21 элементом

ids[0]=160431133&ids[1]=16048883&ids[2]=16048882&ids[3]=16041333&ids[4]=16041313&ids[5]=16041303&ids[6]=16041293&ids[7]=16041283&ids[8]=16041273&ids[9]=16041263&ids[10]=16041253&ids[11]=16041243&ids[12]=16041233&ids[13]=16041133&ids[14]=19116791&ids[15]=19116691&ids[16]=19116591&ids[17]=19116590&ids[18]=19116581&ids[19]=19116571&ids[20]=12416591&

Анализируется как

['160431133', ...., '12416591']

Массив запросов с более чем 21 элементом

ids[0]=160431133&ids[1]=16048883&ids[2]=16048882&ids[3]=16041333&ids[4]=16041313&ids[5]=16041303&ids[6]=16041293&ids[7]=16041283&ids[8]=16041273&ids[9]=16041263&ids[10]=16041253&ids[11]=16041243&ids[12]=16041233&ids[13]=16041133&ids[14]=19116791&ids[15]=19116691&ids[16]=19116591&ids[17]=19116590&ids[18]=19116581&ids[19]=19116571&ids[20]=12416591&ids[21]=123456789

Анализируется как

{
'0': 160431133
.
.
.
'21': 123456789
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...