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
我有一个使用 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