当没有从路由处理程序调用响应方法时,下面哪个引用的代码(选项)将挂起用户请求
选项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请求。
另一个最佳实践是在请求方法(通常是控制器)的最后一行总是有一个返回函数。这将确保请求至少关闭。