javascript - 从 Fetch API 更改请求对象的 URL

标签 javascript fetch-api

假设我有一个小函数,它接受一个 Request 对象作为参数,并调用 fetch() API。

除非我总是想在 url 中附加一些内容,例如 ?foo=bar。我很好奇最好的方法是什么。

例子:

function fetchFoo(request) {

   request.url += '?foo=bar';
   return fetch(request);

}

我遇到的问题是这行不通。 Fetch API specification声明 url 属性是只读的。

有没有办法解决这个问题?我在想我可能需要构造一个全新的 Request 对象,但我不确定从以前的 Request 对象继承所有选项的聪明方法是什么.

请注意,我可以使用以下语法覆盖任何其他属性:

var originalRequest = new Request('/url');
var overriddenRequest = new Request(originalRequest, { method: 'POST' });

虽然文档中并不清楚,但似乎第二个 init 参数优先于通过 originalRequest 参数传递的值。我似乎也想不出一种方法来为 url 执行此操作。

最佳答案

您可以利用 Request.prototype 上的键在几行内构建一个新的 Request 对象。

function newRequest(input, init) {
    var url = input;
    if (input instanceof Request) {
        url = mutateUrl(input.url);

        init = init || {};
        Object.keys(Request.prototype).forEach(function (value) {
            init[value] = input[value];
        });
        delete init.url;

        return input.blob().then(function (blob) {
            if (input.method.toUpperCase() !== 'HEAD' && input.method.toUpperCase() !== 'GET' && blob.size > 0) {
                init.body = blob;
            }

            return new Request(url, init);
        })
    } else {
        url = mutateUrl(url);
    }

    return new Request(url, init);
}

注意在 this answer 中讨论的 body 的特殊情况.

关于javascript - 从 Fetch API 更改请求对象的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43486118/

相关文章:

javascript - 如何链接多个 fetch() promise ?

javascript - React 状态更新时动态更改获取请求 url

javascript - 将正则表达式与 CoffeeScript 中的模板相匹配

javascript - 如何让 JavaScript Promise 等待另一个 Promise 在 for() 循环中得到解决

javascript - AngularJS吞掉某些错误,防止窗口的错误事件被调用

javascript - Promises,如何将变量传递给 .then 函数

http - Firefox 获取 API : How to omit the "origin" header in the request?

javascript - AJAX 请求重复项目

javascript - 简单组件的演示包装

javascript - 使用 Fetch API 和 fs.createWriteStream 对文件进行流式响应