expressjs:当响应方法未被调用时,哪些选项将挂起请求



当没有从路由处理程序调用响应方法时,下面哪个引用的代码(选项)将挂起用户请求

选项1:App.get ('/user', function(req, res, next) {res.redirect (/user/所有);})

选项2:App.get ('/user', function(req, res, next) {})

选项3:App.get ('/user', function(req, res, next) {console.log(处理要求);})

选项4:App.get ('/user', function(req, res, next) {res.send("用户数据");})

选项5:App.get ('/user', function(req, res, next) {res.end ();})

选项2,3因为它们没有调用任何用于关闭HTTP请求的res.(方法)。

res.redirect(...)
res.send(...)
res.end()

都在其内部实现中调用res.end()。该方法将关闭HTTP TCP连接,并向客户端发送响应。

当然是2和3,因为RES对象没有被处理,服务器将继续等待RES对象的终端方法。

记住,传递一个简单的return给你的方法并不能保证res已经关闭。你必须为你的端点显式地处理RES对象,以正确地结束它的生命周期。

保持请求挂起是非常糟糕的做法。在生产环境中,这会导致不必要的复杂性,因为网关将响应504 Timed out。

最好有一个全局错误处理程序,确保所有的运行时错误都进入catch块,在那里显式抛出500请求。

另一个最佳实践是在请求方法(通常是控制器)的最后一行总是有一个返回函数。这将确保请求至少关闭。

相关内容

  • 没有找到相关文章

最新更新