发生事件时发送服务器响应,但这会导致无法修改标头,标头已发送错误 要修复此错误传递,将 res 作为 humanPlay 的参数并从播放路径中删除事件侦听器

问题描述

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

这是我的代码

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

    gameStart.humanPlay(req.body)

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

        res.send(moves)

    })
    
})

解决方法

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

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

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

    gameStart.humanPlay(req.body,res)

})

并从班级内部发送回复

res.send(this.moves)