私はfetch
の周りにリクエストを行う前にURLに何かを追加したいラッパーを書いています。クエリパラメータを識別します。私はどのように特定のURLのRequest
オブジェクトのコピーをオリジナルとは異なるものにするかを理解できません。私のコードは次のようになります。別のURLのRequestオブジェクトをコピーするにはどうすればよいですか?
// 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));
}
私はそうのように、Request
コンストラクタの二番目のarguentとして元の要求を入れてみました:
function addLangParameter(request) {
const newUrl = request.url + "?lang=" + lang;
return new Request(newUrl, request);
}
古い要求の属性のほとんどをコピーするには思われるが、古いリクエストのbody
を保持していないようです。たとえば、
const request1 = new Request("/", { method: "POST", body: "test" });
const request2 = new Request("/new", request1);
request2.text().then(body => console.log(body));
「テスト」のログが記録されますが、本文がコピーされないため空の文字列がログに記録されます。
すべての属性を正しくコピーするために何か明示的に行う必要がありますか、または私にとって妥当な何かを行うための素敵なショートカットがありますか?
私はgithub/fetchポリフィルを使用していますが、最新のChromeではpolyfillとネイティブのfetch
の実装をテストしました。
擬似コードを表示しないでください:実際のコードを表示しないでください。 –
@ Mike'Pomax'Kamermans私は実際のコードを追加しました。私はそれが実際の問題を理解することをより困難にすると思う、多分それは役に立つかもしれない。 – Xymostech
ではなく、新しいコードでは、コード自体にRequestオブジェクトを使用することで、あなたが尋ねていることを明らかにしています。 –