Node/Express 我无法在我的路线中设置 header

Node/Express I can't get the header set up in my route

我有一个使用 Node 和 Express 框架的后端以及一个使用 React 的前端。代码在 Typescript 中。

我的后端使用弹性搜索客户端来获取数据,但我认为这不是我的问题所在。

我需要通过前端响应的 http header 检索从后端获取的参数。

为此,我使用了 Express 文档中的这两个函数 http://expressjs.com/en/4x/api.html#res.set and http://expressjs.com/en/4x/api.html#res.json

所以我为我的路线编写了以下代码:

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);
})));

但是header不会用这种方法改变。所以我尝试创建一个异步函数来用以下代码填充我的 header:

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);
})));

无论我做什么header都不会改变并保持其基本形式,如下所示:

content-length: "50643"
content-type: "application/json; charset=utf-8"

有没有人看到我做错了什么,可以帮助我,那会救我。提前致谢:)

正如 Itai 向我指出的那样,我的问题来自我使用的中间件 CORS。通过在此中间件的选项中添加以下两个字段:

'allowedHeaders': ['data_to_send'],
'exposedHeaders': ['data_to_send'],

一切正常。 欲了解更多信息: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers