将“Request”标头转换为纯键值对象

Fla*_*ame 6 javascript iterator javascript-objects

我正在尝试将请求(请参阅https://developer.mozilla.org/en-US/docs/Web/API/Request/headers)对象中的标头列表转换为普通的键/值对象。

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

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

无法使用的结果:

const result1 = JSON.stringify(req.headers);
// result1 =  `{}`
Run Code Online (Sandbox Code Playgroud)

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

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

我正在寻找某种单行(可能包括对象Array.from()上的一些其他方法,Request.headers例如.keys()/ .values()),以便我能够对结果进行字符串化。

Nic*_*ons 8

您可以使用该Object.fromEntries()方法,然后将该对象字符串化,如下所示。该.fromEntries()方法将调用 headers 对象的迭代器(即:.entries())来获取 header 对象的条目,然后使用它来创建一个对象。然后您可以将其传递给以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);
Run Code Online (Sandbox Code Playgroud)