Node.js发送含Base64图片的JSON遇413请求实体过大错误
解决Express请求实体过大(PayloadTooLargeError)问题
问题情况
发送包含Base64编码图片的JSON数据时触发错误,数据示例:
{desc: "hi", img: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABMY" }
报错信息:
PayloadTooLargeError: request entity too large at readStream (/Users/mac/Documents/projects/socialmediaclone/backend/node_modules/raw-body/index.js:156:17)
当前Express配置代码
app.use(express.json()); app.use(express.json({ limit: "200mb" })); app.use(express.urlencoded({ limit: "200mb", extended: true })); app.use(express.text({ limit: "200mb" })); app.use( cors({ credentials: true, origin: "http://localhost:3000", }) ); app.use(cookieParser()); app.use("/api/auth", authRoutes); app.use("/api/stories", storyRoutes); app.use("/api/users", userRoutes); app.use("/api/posts", postRoutes); app.use("/api/comments", commentRoutes); app.use("/api/likes", likeRoutes); app.use("/api/relationships", relationshipRoutes);
问题根源与修复方案
你重复注册了express.json()中间件,第一次调用未添加limit参数,会使用默认的100KB限制,且这个无参数的中间件会优先处理请求,导致后续带200MB限制的配置完全失效。
直接删除无参数的app.use(express.json());,保留带限制配置的版本即可:
// 移除无效配置:app.use(express.json()); app.use(express.json({ limit: "200mb" })); app.use(express.urlencoded({ limit: "200mb", extended: true })); app.use(express.text({ limit: "200mb" })); // 其余配置保持不变
额外提醒:如果你的Base64图片实际大小超过200MB,可以适当调高limit值,比如设置为"500mb"。
内容的提问来源于stack exchange,提问作者etranz
相关产品推荐
相关产品推荐

