带有正文分析器的Express应用程序中出现超过最大调用堆栈大小错误

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

本文关键字:调用 错误 堆栈 分析器 正文 Express 应用程序      更新时间:2023-09-26

我只是偶尔会遇到这个错误,除了尝试做尽可能多的事情以在应用程序中产生尽可能大的流量之外,我真的没有任何步骤可以在应用程序中将其复制。仍然不确定这是某个中间件的问题还是完全是其他的问题。我目前在应用程序中使用身体解析器,这是根据他们的指令设置的。

如果我使用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)

经过多次尝试,我甚至不知道该从哪里开始。如果我重新启动我的应用程序,它将再次正常工作,直到我在应用程序中做了足够的工作,它再次触发此错误。此外,据我所见,应用程序中的内存利用率是正常的,服务器仍然有足够的内存可用。

该问题与一个中间件有关,该中间件正在调用next()并在之后执行大量操作。包装下一个进程。nextTick()暂时解决了调用堆栈问题。我应该注意的是,使用节点检查器来定位问题

我通过这个解决了我的问题。

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

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

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

它可能看起来像某个地方的内存泄漏,某个地方有无限循环,或者请求没有完成(这可能不是真的,因为请求的默认超时为1000s)。