React Native Expo启动后PayloadTooLargeError问题求助
问题排查:Expo启动后iPhone端PayloadTooLargeError及异常代码执行/无限循环问题
报错日志
Android Running app on sdk_gphone_x86 Sentry Logger [log]: Unhandled promise rejections will be caught by Sentry. Sentry Logger [log]: Integration installed: ReactNativeErrorHandlers Sentry Logger [log]: Integration installed: Release Sentry Logger [log]: Integration installed: InboundFilters Sentry Logger [log]: Integration installed: FunctionToString Sentry Logger [log]: Integration installed: Breadcrumbs Sentry Logger [log]: Integration installed: LinkedErrors Sentry Logger [log]: Integration installed: Dedupe Sentry Logger [log]: Integration installed: HttpContext Sentry Logger [log]: Integration installed: EventOrigin Sentry Logger [log]: Integration installed: SdkInfo Sentry Logger [log]: Integration installed: DebugSymbolicator Sentry Logger [log]: Integration installed: RewriteFrames Sentry Logger [log]: Integration installed: ExpoManagedIntegration device false PayloadTooLargeError: request entity too large at readStream (C:\Users\hassn\AppData\Roaming\npm\node_modules\expo-cli\node_modules\raw-body\index.js:155:17) at getRawBody (C:\Users\hassn\AppData\Roaming\npm\node_modules\expo-cli\node_modules\raw-body\index.js:108:12) at read (C:\Users\hassn\AppData\Roaming\npm\node_modules\expo-cli\node_modules\body-parser\lib\read.js:77:3) at jsonParser (C:\Users\hassn\AppData\Roaming\npm\node_modules\expo-cli\node_modules\body-parser\lib\types\json.js:135:5) at call (D:\personal\teleMed-master\node_modules\connect\index.js:239:7) at next (D:\personal\teleMed-master\node_modules\connect\index.js:183:5) at remoteDevtoolsCorsMiddleware (C:\Users\hassn\AppData\Roaming\npm\node_modules\expo-cli\node_modules\@expo\dev-server\src\middleware\remoteDevtoolsCorsMiddleware.ts:31:3) at call (D:\personal\teleMed-master\node_modules\connect\index.js:239:7) at next (D:\personal\teleMed-master\node_modules\connect\index.js:183:5) at serveStatic (D:\personal\teleMed-master\node_modules\serve-static\index.js:75:16)
问题描述
执行expo start后,在iPhone上运行应用时触发PayloadTooLargeError: request entity too large错误,同时出现两个异常:已注释的代码被执行、应用陷入无限循环,无法自行解决。
排查与解决方案
1. 解决PayloadTooLargeError核心问题
该错误是Expo开发服务器默认请求体大小限制不足导致的,可通过以下方式调整:
- 临时启动方案:执行命令时指定更大的请求体限制
expo start --max-http-body-size 50mb - 持久化配置:在项目根目录创建/修改
expo.config.js,添加服务器配置module.exports = { // 保留原有配置 server: { maxHttpBodySize: '50mb' } };
2. 排查已注释代码被执行的问题
- 检查注释格式:确认没有嵌套注释(
/* */内不能再包含/* */),单行注释//后的代码是否被误纳入同一逻辑块 - 清理缓存:执行
expo start --clear清除Expo缓存,避免旧代码残留 - 检查打包配置:确认babel、metro等工具的注释处理插件配置正常,未出现错误解析
3. 排查无限循环问题
- 定位触发点:在疑似循环的代码块添加
console.log标记,或通过Expo开发者菜单开启远程调试,用Chrome DevTools打断点追踪调用栈 - 检查状态更新:确认React组件中
useState/useReducer的更新未在渲染函数中触发,避免无限重渲染 - 清理定时器/订阅:检查是否有未正确清除的
setInterval、WebSocket连接或事件订阅,导致持续触发逻辑
关联提示
大请求体可能是应用启动时上传了过大资源(如本地缓存文件、调试日志),触发服务器错误后,客户端错误处理不当可能引发循环,或加载缓存的旧代码导致注释代码执行,建议先解决PayloadTooLargeError后再验证其他异常是否消失。
内容的提问来源于stack exchange,提问作者Hassnain Ali
相关产品推荐
相关产品推荐

