developit / developit/redaxios
Not possible to transform headers per request
- Vorherrschende Sprache
- JavaScript
- Sterne
- 4.9k
- Forks
- 104
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
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),
},
}),
});
```
Beitragsleitfaden
Rechercherichtung
Beginne damit, die Erstellung von Requests durch die interne deepMerge-Funktion und den transformRequest-Einstiegspunkt nachzuverfolgen, und vergleiche, wie das headers-Objekt zwischen Requests wiederverwendet wird. Überprüfe das Verhalten mit wiederholten Requests anhand des gezeigten transformRequest-Beispiels; fertig ist die Arbeit, wenn Transformationen der Header pro Request keine Mutationen aus früheren Requests mehr beobachten und der dokumentierte custom-fetch-Workaround weiterhin unnötig bleibt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- javascript
- Bereich
- api
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Klar beschrieben
- Anfängerfreundlichkeit
- 50/100