将“请求”headers 转换为普通键值 object

Transform `Request` headers to plain key value object

我正在尝试将 headers 的列表从请求(参见 https://developer.mozilla.org/en-US/docs/Web/API/Request/headers)object 转换为普通的 key/value object。

// Create a Request object.
const req = new Request('https://example.com', {
    headers: {
        'X-Test-header': 'Test'
    }
});

遗憾的是,以下内容不起作用,因为 headers 属性 是 iterator:

无法使用的结果:

const result1 = JSON.stringify(req.headers);
// result1 =  `{}`

可用结果但创建起来非常冗长:

const headers = {};
for(const [key, value] of req.headers.entries()) {
    headers[key] = value;
}
const result2 = JSON.stringify(headers)
// result2 = `{'X-Test-Header': 'Test'}`

我正在寻找某种单一衬垫(可能包括 Array.from()some of the other methods on the Request.headers object,例如 .keys()/.values(),以便我能够将结果。

如果您只想获取 headers 作为常规 object 那么您可以使用 Array.from() 生成一个带有 key-value 对的二维数组并创建一个 object 来自二维数组,使用 Object.fromEntries()

const req = new Request('https://example.com', {
    headers: {
      'X-Test-header': 'Test',
      'accepts': 'application/json'
    }
});

const headers = Object.fromEntries(Array.from(req.headers.entries()));


console.log(JSON.stringify(headers));

为什么这行得通? req.headers.entries() 为您提供了一个 Interator {} ,它是数组类型但不是数组。因此,您无法在其上实施任何 Array.prototype 方法。但幸运的是,Array.from()接受任何数组类型并将其转换为数组。

因此,Array.from(req.headers.entries()) 生成一个二维数组,如 -

[['X-Test-header', 'Test'], ['accepts', 'application/json']]

如果您看到 Object.fromEntries() 结构,您会发现此方法采用相同的二维类型数组来生成 object.

现在您可以在 headers object 上应用 JSON.stringify()

您可以使用 Object.fromEntries() method, and then stringify that object like below. The .fromEntries() method will invoke the iterator of your headers object (ie: the .entries()) 获取 header object 的条目,然后使用它来创建 object。然后您可以将其传递给 JSON.stringify() 以获取您的 JSON 字符串:

const req = new Request('https://example.com', {
    headers: {
        'X-Test-header': 'Test'
    }
});

const result1 = JSON.stringify(Object.fromEntries(req.headers));
console.log(result1);