【问题标题】:ExpressJS throwing multiple header error while I seem to be sending only one header当我似乎只发送一个标头时,ExpressJS 抛出多个标头错误
【发布时间】:2021-09-02 07:43:45
【问题描述】:

我有以下代码块:

router.put("/:_id", async (req: Request, res: Response) => {

try {
    // Create the updated artist variable
    const artist: IArtist = req.body;

    const updatedArtist = await Artist.findOneAndUpdate({_id: req.params._id}, artist);

    return res.sendStatus(200).json(updatedArtist);
} catch (err) {
    // console.log(err);
    return res.sendStatus(400).send("Couldn't update artist");
}

});

这会引发以下错误:

(node:32408) UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:561:11)
    at ServerResponse.header (C:\Users\thimo\Documents\GitHub\FlexTix\server\node_modules\express\lib\response.js:771:10)  
    at ServerResponse.contentType (C:\Users\thimo\Documents\GitHub\FlexTix\server\node_modules\express\lib\response.js:599:15)
    at ServerResponse.sendStatus (C:\Users\thimo\Documents\GitHub\FlexTix\server\node_modules\express\lib\response.js:357:8)
    at C:\Users\thimo\Documents\GitHub\FlexTix\server\src\routes\artists.ts:44:20
    at step (C:\Users\thimo\Documents\GitHub\FlexTix\server\src\routes\artists.ts:33:23)
    at Object.next (C:\Users\thimo\Documents\GitHub\FlexTix\server\src\routes\artists.ts:14:53)
    at fulfilled (C:\Users\thimo\Documents\GitHub\FlexTix\server\src\routes\artists.ts:5:58)
    at processTicksAndRejections (internal/process/task_queues.js:95:5)

据我所知,我只发送一个标头。我该如何解决这个问题?

【问题讨论】:

  • 顺便说一句,函数本身就是更新Mongo数据库中的Artist

标签: javascript node.js typescript express


【解决方案1】:

您需要使用.status() 而不是.sendStatus()。当您在 .sendStatus() 之上使用 .json().send() 时 - express 会尝试在由于 .sendStatus() 而已发送的响应之上设置其他标头

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-03
    • 2020-11-06
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 2021-11-30
    相关资源
    最近更新 更多