【问题标题】:Sending server response when an events occurs but this cause a (cannot modify headers, headers have already been sent) error发生事件时发送服务器响应,但这会导致(无法修改标头,标头已发送)错误
【发布时间】:2021-02-17 08:26:05
【问题描述】:

在我的项目中,用户向这条路线发出请求,会发生一些复杂的逻辑,当发生移动事件时,应用会向用户发送响应。 代码工作正常响应发送给用户,但应用程序拒绝退出路由处理程序,这使得服务器在我尝试访问路由时崩溃并显示错误消息(无法修改标头,标头已发送)再次

这是我的代码

app.post('/api/play', (req, res) =>{

    gameStart.humanPlay(req.body)

    gameStart.on("move-made", (moves) => {

        res.send(moves)

    })
    
})

【问题讨论】:

    标签: node.js express events routes eventemitter


    【解决方案1】:

    将事件侦听器放在播放路由中会创建多个事件侦听器,每次客户端向播放路由发送发布请求时,都会向客户端发送多个响应这是导致错误消息的原因(无法修改标头标头已被已发送)。

    要修复此错误传递,将 res 作为 humanPlay 的参数并从播放路径中删除事件侦听器

    app.post('/api/play', (req, res) =>{
    
        gameStart.humanPlay(req.body, res)
    
    })
    

    并从类中发送响应

    res.send(this.moves)
    
    

    【讨论】:

    • 这个答案可以通过解释为什么 res.send 在 humanPlay 方法中是合适的,但在事件监听器中是一个问题来改进。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    相关资源
    最近更新 更多