将“请求”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);
我正在尝试将 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);