Я пишу обертку вокруг fetch
, которую я хотел бы добавить что-то в URL, прежде чем делать запрос, например. определение параметров запроса. Я не могу понять, как сделать копию данного объекта Request
с другим 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
, например:
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));
Я ожидал бы log "test", но вместо этого он записывает пустую строку, потому что тело не копируется.
Нужно ли мне делать что-то более явное, чтобы правильно копировать все атрибуты, или есть хороший ярлык, который сделает что-то разумное для меня?
Я использую github/fetch polyfill, но протестировал с помощью как polyfill, так и собственной fetch
реализации в последнем Chrome.