Угловой запрос, как это работает для nestjsx / crud

#angularjs #parameters #request #http-get #query-parameters

#angularjs #параметры #запрос #http-get #строка запроса

Вопрос:

Я часами пытался заставить это работать, и я не могу этого сделать, я надеюсь, что у кого-то из вас есть ответ на мой вопрос, потому что это должно быть очень просто, и я новичок, я использую AngularJS, а NestJS в Nest использовал @nestjsx/crud , и я обратился к документам запроса итак, вот проблема:

Это моя сервисная функция Angular

 getProductsOfPiece(pieceId: number): Observable<ProductSimple[]> {
    return this.http.get<ProductSimple[]>(
      'api/producto/', {
        params: {
          fields: "id,refFabr,refCliente,descrCorta,imagen",
          filter: 'pieza.id||$eq||'  pieceId
        }
      }
    );
  }
  

Этот запрос выдает мне 400 плохой запрос, он выглядит так:

 /api/producto/?fields=id,refFabr,refCliente,descrCorta,imagenamp;filter=pieza.id%7C%7C$eq%7C%7C1
  

Я полагаю, что % и шестнадцатеричный имеют какое-то отношение к кодированию URI и пытались его кодировать / декодировать, но не сработало.

Я также попытался использовать класс RequestQueryBuilder of @nestjsx/crud-request из интерфейса использования, на который ссылается документация, и добавить его к URL

  let queryString = RequestQueryBuilder.create()
      .select(["id","refFabr","refCliente","descrCorta","imagen"])
      .setFilter({
        field: "coleccion.id",
        operator: CondOperator.EQUALS,
        value: collectionId
      }).query();
 return this.http.get<ProductSimple[]>(
      'api/producto/?' queryString
 );
  

но получил худший результат

 /api/producto/?fields=id%2CrefFabr%2CrefCliente%2CdescrCorta,imagenamp;filter[0]=pieza.id%7C%7C$eq%7C|1
  

Чего я не понимаю, так это как я делаю это с моим Postmand, и это работает!

 api/producto/?fields=id,refFabr,refCliente,descrCorta,imagenamp;filter=coleccion.id||$eq||6
  

Как я могу заставить это работать, что не так с моим кодом?

Ответ №1:

Наконец-то получил ответ, просто нужно было установить .query(false) на RequestQueryBuilder , этот boolean параметр предназначен для encode , швы, подобные HttpClient классу Angular, выполняют некоторую кодировку или что-то в URL, так или иначе

Это работает! Вот код:

   getProductsOfPiece(pieceId: number): Observable<ProductSimple[]> {
     let queryString = RequestQueryBuilder.create()
      .select(["id","refFabr","refCliente","descrCorta","imagen"])
      .setFilter({
        field: "coleccion.id",
        operator: CondOperator.EQUALS,
        value: collectionId
      }).query(false);
     return this.http.get<ProductSimple[]>(
      'api/producto/?' queryString
     );
  }
  

И вам нужно импортировать
RequestQueryBuilder из @nestjsx/crud-request

npm i @nestjsx/crud-запрос.

Любые замечания приветствуются…

ОБНОВИТЬ для создания или обновления

Вот некоторые документы, которые создают одинhttps://github.com/nestjsx/crud/wiki/Controllers#create-one-resource Обновление одно https://github.com/nestjsx/crud/wiki/Controllers#update-one-resource

Следуя этому руководству, создание и обновление просты, просто отправьте сообщение в API ‘api /producto /’ (например) с объектом в качестве тела в запросе на обновление аналогично, просто используя метод PUT и API с идентификатором модели ‘api/producto /1’ (например)

Комментарии:

1. Я прекрасно понимаю, как сделать запрос на выбор с вашими объяснениями, но как сделать запрос, пытающийся создать или обновить элемент, а не просто прочитать его?

2. Я добавил некоторую дополнительную информацию, чтобы помочь вам. @Iabelle