Ich schreibe einen Wrapper um fetch
, dass ich etwas an die URL hinzufügen möchte, bevor Sie die Anfrage z. Identifizieren von Abfrageparametern. Ich kann nicht herausfinden, wie man eine Kopie eines gegebenen Request
Objekts mit einer anderen URL als dem Original erstellt. Mein Code sieht so aus:Wie kopiere ich ein Request-Objekt mit einer anderen URL?
// My function which tries to modify the URL of the request
function addLangParameter(request) {
const newUrl = request.url + "?lang=" + lang;
return new Request(newUrl, /* not sure what to put here */);
}
// My fetch wrapper
function myFetch(input, init) {
// Normalize the input into a Request object
return Promise.resolve(new Request(input, init))
// Call my modifier function
.then(addLangParameter)
// Make the actual request
.then(request => fetch(request));
}
Ich habe versucht, die ursprüngliche Anforderung als zweiten arguent an den Konstruktor Request
setzen, etwa so:
function addLangParameter(request) {
const newUrl = request.url + "?lang=" + lang;
return new Request(newUrl, request);
}
die meist Attribute des alten Wunsches zu kopieren scheint aber scheint nicht die body
der alten Anfrage zu bewahren. Zum Beispiel würde
const request1 = new Request("/", { method: "POST", body: "test" });
const request2 = new Request("/new", request1);
request2.text().then(body => console.log(body));
Ich erwartet, dass „test“ protokollieren, sondern protokolliert er die leere Zeichenkette, weil der Körper über nicht kopiert wird.
Muss ich etwas expliziteres tun, um alle Attribute korrekt zu kopieren, oder gibt es eine nette Abkürzung, die etwas Sinnvolles für mich tut?
Ich benutze die github/fetch Polyfill, aber habe mit dem Polyfill und der nativen fetch
Implementierung im neuesten Chrome getestet.
Pseudocode nicht anzeigen: echten Code anzeigen. –
@ Mike'Pomax'Kamermans Ich habe den eigentlichen Code hinzugefügt. Ich denke, es macht es schwerer, das eigentliche Problem zu verstehen, vielleicht wird es hilfreich sein. – Xymostech
statt härter, Ihr neuer Code macht es tatsächlich offensichtlich, was Sie fragen, indem Sie Ihre Verwendung des Request-Objekts im Code selbst zeigen. –