Tengo un backend que usa Node y el framework Express y un frontend en React. El código está en Typescript.
Mi backend usa el cliente de búsqueda elástico para obtener los datos, pero no creo que ese sea el problema.
Necesito recuperar un parámetro que obtengo del backend a través del encabezado http de mi respuesta en mi interfaz.
Para hacer esto, utilicé estas dos funciones del documento Express http://expressjs.com/en/4x/api.html#res.set y http://expressjs.com/en/4x/api.html#res. json
Así que escribí el siguiente código para mi ruta:
searchRouter.get('/search', (asyncHandler(async (req, res) => { const response = await client.search<HitResult>({ index: my-index, scroll: "1m", body: { My elastic request } }); res.set('data_to_send',response.body.data_to_send); console.log('is there a hearder? ', res.headersSent) //always return false res.json(response); })));Pero el encabezado no cambia con este método. Así que traté de crear una función asíncrona para llenar mi encabezado con el siguiente código:
async function buildHeader(response: express.Response<any, Record<string, any>>, headerName: string, headerValue: string | undefined): Promise<any> { response.header(headerName,headerValue); } searchRouter.get('/search', (asyncHandler(async (req, res) => { const response = await client.search<HitResult>({ index: my-index, scroll: "1m", body: { My elastic request } }); await buildHeader(res, 'data_to_send', response.body.data_to_send); console.log('is there a hearder? ', res.headersSent) //always return false res.json(response); })));Haga lo que haga la cabecera no cambia y mantiene su forma básica, la siguiente:
content-length: "50643" content-type: "application/json; charset=utf-8"¿Alguien ve lo que estoy haciendo mal y podría ayudarme, eso me salvaría? Gracias por adelantado :)
Como me señaló Itai, mi problema provino del middleware que estaba usando, CORS. Agregando en las opciones de este middleware los dos campos siguientes:
'allowedHeaders': ['data_to_send'], 'exposedHeaders': ['data_to_send'],Todo funciona como se esperaba. Para obtener más información: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers