如果我在 express.js 中省略 next() 会怎样?

Ghe*_*man 7 javascript node.js express

express.js 文档指出,如果next()在路由中从未调用过,则

该请求将被搁置

( https://expressjs.com/en/guide/writing-middleware.html )

这意味着什么?这是否意味着next()即使我已经调用res.send并且请求处理已完成,我也应该完成每个请求?如果我省略它会不会有内存泄漏或其他问题?

更新:我确实将中间件与路由混淆了。我忘记了循环可以结束。但我不知道如何结束它。

Anu*_*ond 5

这意味着什么?

这意味着请求/响应周期仍未完成。响应不会发送到浏览器,浏览器会一直等待。

这是否意味着即使我已经调用 res.send 并且请求处理已完成,我也应该使用 next() 完成每个请求?

整个句子是...

如果当前中间件函数没有结束请求-响应循环,则必须调用 next() 将控制权传递给下一个中间件函数。否则,请求将被挂起。

因此,如果您打算在当前中间件中结束循环,您可以只调用 res.send、res.end 或 res.json 而无需 next()。但是如果你打算去下一个中间件,你应该调用 next() 否则它不会去下一个中间件。

如果我省略它会不会有内存泄漏或其他问题?

如果请求/响应周期没有完成,那么分配给该周期的内存将不会返回,这意味着内存泄漏。

  • 不,内存不会泄漏,即使您没有调用 next() 并且没有调用 res.send、res.end 或 res.json。因为中间件只是一系列回调。如果您没有在某个中间件函数中正确结束 req/res 循环,则中间件链将简单地在该函数处结束。该中间件堆栈的调用堆栈将被清除,内存将被释放。(当然,客户端将处于挂起状态,直到超时) (3认同)