-
Notifications
You must be signed in to change notification settings - Fork 10
Open
Description
Лейбл не ставлю, решите сами, ошибка это или же мы что не так поняли. Но
- использовали NodeKit на проекте, где в том числе были multiPart-запросы (загрузка фото)
- объявили свой
DefaultChain
final class DefaultChain<T: UrlRouteProvider>: UrlChainsBuilder<T>
- у него переопределили
override func requestBuildingChain() -> Node<Json, Json>
- в нём мы подставляли новые узлы, которые инжектят в запросы кастомные хедеры (к примеру), в том числе и критически важный хедер, содержащий userId
Проблема:
- когда посылали multipart-запросы - хедеров ожидаемых не было
На что стоит обратить внимание:
На что обратили внимание. Файл UrlChainsBuilder.swift, там есть метод
open func build<I, O>() -> Node<I, O> where O: DTODecodable, O.DTO.Raw == Json, I: DTOEncodable, I.DTO.Raw == MultipartModel<[String : Data]> {
let reponseProcessor = self.serviceChain.urlResponseProcessingLayerChain()
let requestSenderNode = RequestSenderNode(rawResponseProcessor: reponseProcessor)
let creator = MultipartRequestCreatorNode(next: requestSenderNode, session: session)
let transformator = MultipartUrlRequestTrasformatorNode(next: creator, method: self.method)
let queryInjector = URLQueryInjectorNode(next: transformator, config: self.urlQueryConfig)
let router = self.requestRouterNode(next: queryInjector)
let connector = MetadataConnectorNode(next: router, metadata: self.metadata)
let rawEncoder = DTOMapperNode<I.DTO,O.DTO>(next: connector)
let dtoEncoder = ModelInputNode<I, O>(next: rawEncoder)
let indicator = LoadIndicatableNode(next: dtoEncoder)
let configNode = ChainConfiguratorNode(next: indicator)
return LoggerNode(next: configNode, filters: self.logFilter)
}
то есть формирование цепочки идет в обход переопределяемого нами метода requestBuildingChain()
, в отличие от, например
/// Создает обычную цепочку, только в качестве входных и вызодных данных имеет `Void`
open func build() -> Node<Void, Void> {
let input = self.requestBuildingChain()
let indicator = LoadIndicatableNode(next: input)
let configNode = ChainConfiguratorNode(next: indicator)
let voidOutput = VoidIONode(next: configNode)
return LoggerNode(next: voidOutput, filters: self.logFilter)
}
В общем, есть ли проблема, можно ли ее поправить, или же это все решалось по-другому и проблем нет?)
Metadata
Metadata
Assignees
Labels
No labels