fetch
リクエストを行う前に URL に何かを追加したいラッパーを書いています。たとえば、クエリ パラメータを識別します。Request
元の URL とは異なる 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));
}
次のように、元のリクエストをRequest
コンストラクターの 2 番目の引数として入れてみました。
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 でポリフィルとネイティブfetch
実装の両方をテストしました。