Estoy tratando de convertir una lista de encabezados de un objeto de solicitud (consulte https://developer.mozilla.org/en-US/docs/Web/API/Request/headers ) en un objeto de clave/valor simple.
// Create a Request object. const req = new Request('https://example.com', { headers: { 'X-Test-header': 'Test' } }); Lamentablemente, lo siguiente no funciona porque la propiedad headers es un iterator :
Resultado inutilizable:
const result1 = JSON.stringify(req.headers); // result1 = `{}`Resultado utilizable pero muy detallado para crear:
const headers = {}; for(const [key, value] of req.headers.entries()) { headers[key] = value; } const result2 = JSON.stringify(headers) // result2 = `{'X-Test-Header': 'Test'}` Estoy buscando algún tipo de trazador de líneas (tal vez incluyendo Array.from() o algunos de los otros métodos en el objeto Request.headers como .keys() / .values() para poder clasificar el resultado .
Puede usar el método Object.fromEntries() y luego encadenar ese objeto como se muestra a continuación. El método .fromEntries() invocará el iterador de su objeto de encabezados (es decir, .entries() ) para tomar las entradas del objeto de encabezado y luego usar eso para crear un objeto. Luego puede pasar esto a JSON.stringify() para obtener su cadena JSON:
const req = new Request('https://example.com', { headers: { 'X-Test-header': 'Test' } }); const result1 = JSON.stringify(Object.fromEntries(req.headers)); console.log(result1);Si solo desea capturar los encabezados como un objeto normal, puede generar una matriz 2d con un par clave-valor usando Array.from() y crear un objeto a partir de la matriz 2d usando 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)); ¿Por qué funciona esto? El req.headers.entries() le proporciona un Interator {} que es un tipo de matriz pero no una matriz. Por lo tanto, no podría implementar ningún método Array.prototype en él. Pero, afortunadamente, Array.from() acepta cualquier tipo de matriz y la convierte en una matriz.
Entonces, Array.from(req.headers.entries()) genera una matriz 2D como:
[['X-Test-header', 'Test'], ['accepts', 'application/json']] Y si ve la estructura Object.fromEntries() , encontrará que este método toma la misma matriz de tipo 2D para generar un objeto.
Ahora podría aplicar JSON.stringify() en el objeto de encabezados.