developit / developit/redaxios

Not possible to transform headers per request

Aperta
#82 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
bug
Lingua principale
JavaScript
Stelle
4.9k
Fork
104
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

I'm using transformRequest to add custom header to the request before it is sent the following way:

```
const apiClient = redaxios.create({
baseURL,
headers: {
Accept: 'application/json',
'Content-Type': 'application/json; charset=utf-8',
},
transformRequest: [(data, headers) => {
console.log(headers['Payload-Signature']); // <-- here I see header set for previous request

if (data) headers['Payload-Signature'] = signRequestBody(data);
}],
});
```

As show in code above headers object is shared between requests and because of that it is not possible to customise headers per requests before one is sent.

The reason is that internal deepMerge function doesn't create a copy of 'options.header' property.

Expected behaviour:
I would expect it is possible to safely transform headers per request or modify other request props.

As a workaround I define a custom fetch:

```
const apiClient = redaxios.create({
baseURL,
headers: {
Accept: 'application/json',
'Content-Type': 'application/json; charset=utf-8',
},
fetch: (url, options) => fetch(url, {
...options,
headers: {
...options.headers,
'payload-signature': signRequestBody(options.body),
},
}),
});
```

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Inizia tracciando la creazione delle request attraverso la funzione interna deepMerge e l’entry point transformRequest, confrontando il modo in cui l’oggetto headers viene riutilizzato tra le request. Verifica il comportamento con request ripetute usando l’esempio transformRequest mostrato; il lavoro è concluso quando le trasformazioni degli header per request non osservano più mutazioni provenienti da request precedenti e il workaround custom-fetch documentato rimane non necessario.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
javascript
Ambito
api
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Ferma
Chiarezza
Specificata chiaramente
Idoneità per principianti
50/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.