首页 > 解决方案 > 如何修复无法在将标头发送到客户端后设置标头错误?

问题描述

我有 2 个问题,通过使用进行了搜索查询express get method,它工作正常,它得到了请求的票证,问题是我不断收到错误,即使方法正在运行,所以第一个问题是为什么我不断收到这些错误以及如何修复它?

控制台日志:

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:558:11)
    at ServerResponse.header (C:Project\server\node_modules\express\lib\response.js:771:10)       
    at ServerResponse.json (C:Project\server\node_modules\express\lib\response.js:264:10)
    at ServerResponse.send (C:Project\server\node_modules\express\lib\response.js:158:21)
    at C:Project\server\index.ts:63:7
    at Layer.handle [as handle_request] (C:Project\server\node_modules\express\lib\router\layer.js:95:5)
    at next (C:Project\server\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (C:Project\server\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (C:Project\server\node_modules\express\lib\router\layer.js:95:5)
    at C:\Project\server\node_modules\express\lib\router\index.js:281:22

代码:

  app.get(APIPath, (req, res) => {
    //@ts-ignore
    const search:String = req.query.search;
  if(search !== undefined){
    const filteredTickets = tempData.filter((t) => (t.title.toLowerCase() + t.content.toLowerCase()).includes(search.toLowerCase()));
    res.send(filteredTickets);
  }

  // @ts-ignore
  const page: number = req.query.page || 1;

  const paginatedData = tempData.slice((page - 1) * dataProps.getPageSize(), page * dataProps.getPageSize());

  console.log("Server: Page " + page + " was sent!");
  console.log("Server: Search query: " + search)

  res.send(paginatedData);
});

如您所见,我在同一个函数中进行了 2 个查询,页面查询工作得非常好,我尝试组合它们的原因是因为我希望在搜索其他参数后仍然能够拥有页面(页面限制为 20) ,但目前他们没有一起工作,因为我不知道该怎么做。这就引出了第二个问题,我如何将这两个查询结合起来,使它看起来像这样https://localhost:3000/?page=[Page]/?search=[Search request]

标签: typescriptapiexpresshttprequestquery-parameters

解决方案


您不能res.send()多次调用。res.send()不会自行停止函数的执行,因此您必须手动返回。

return res.send(filteredTickets);

否则,该函数将继续执行并进行第二次res.send()调用。


推荐阅读