带有主体解析器的 Express 应用程序中的最大调用堆栈大小超过错误

Maximum Call Stack Size Exceeded Error in Express App with Body Parser

我只是偶尔遇到这个错误,除了尝试做尽可能多的事情以在应用程序中产生尽可能多的流量之外,我真的没有任何步骤可以在应用程序中复制它。仍然不确定这是某些中间件的问题还是完全是其他问题。我目前在应用程序中使用 body-parser,这是按照他们的说明设置的。

如果我使用 Postman,我会在调用 OPTIONS /server_url 时返回此错误。当这个错误触发时,它总是会为所有对 OPTIONS、POST 和 DELETE 的网络请求生成这个错误——这需要为 CORS 相关的东西完成。无论出于何种原因,GET 和 PUT 请求似乎仍然没有问题。

RangeError: Maximum call stack size exceeded
   at proxy (../node_modules/express/lib/router/index.js:643:8)
   at next (../node_modules/express/lib/router/index.js:206:14)
   at Layer.handle [as handle_request] (../node_modules/express/lib/router/layer.js:97:5)
   at ../node_modules/express/lib/router/index.js:277:22
   at param (../node_modules/express/lib/router/index.js:349:14)
   at param (../node_modules/express/lib/router/index.js:365:14)
   at Function.process_params (../node_modules/express/lib/router/index.js:410:3)
   at next (../node_modules/express/lib/router/index.js:271:10)
   at next (../node_modules/express/lib/router/route.js:121:14)
   at next (../node_modules/express/lib/router/route.js:125:14)
   at next (../node_modules/express/lib/router/route.js:125:14)
   at next (../node_modules/express/lib/router/route.js:125:14)
   at next (../node_modules/express/lib/router/route.js:125:14)
   at next (../node_modules/express/lib/router/route.js:125:14)
   at next (../node_modules/express/lib/router/route.js:125:14)
   at next (../node_modules/express/lib/router/route.js:125:14)

在尝试了很多次之后,我什至不知道从哪里开始。如果我重新启动我的应用程序,它将再次开始正常工作 - 直到我在应用程序中完成足够的操作并再次触发此错误。此外,据我所见,应用程序中的内存使用情况正常,服务器仍有大量可用内存。

它可能看起来像是某处内存泄漏或某处无限循环或请求未完成(这可能不是真的,因为请求带有 1000 秒的默认超时)。

该问题与一个调用 next() 并在之后执行大量操作的中间件有关。将 next 包装在 process.nextTick() 中暂时解决了调用堆栈问题。我应该注意,使用 node-inspector 来定位问题

我用这个解决了我的问题。

var bodyparser = require('body-parser');

而不是app.use(bodyparser.urlencoded({ extended: false })); 写这个

var urlencodedParser = bodyparser.urlencoded({ extended: false });