#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