如何增大Svelte中api/+server.js的请求大小限制
解决SvelteKit +server.js请求413(请求体过大)问题
1. 显式配置SvelteKit与Vite的请求体限制
仅设置BODY_SIZE_LIMIT环境变量无法直接生效,需要在svelte.config.js中同时配置生产服务器和Vite开发服务器的请求体大小限制:
修改svelte.config.js:
import adapter from '@sveltejs/adapter-auto'; import { vitePreprocess } from '@sveltejs/kit/vite'; /** @type {import('@sveltejs/kit').Config} */ const config = { preprocess: vitePreprocess(), kit: { adapter: adapter(), // 配置生产环境服务器的请求体限制 server: { bodySizeLimit: process.env.BODY_SIZE_LIMIT || '50mb' }, // 配置Vite开发服务器的请求体限制(开发环境生效) vite: { server: { bodySizeLimit: process.env.BODY_SIZE_LIMIT || '50mb' } } } }; export default config;
2. 适配部署平台的默认限制
由于你使用adapter-auto,不同平台有独立的请求体大小限制,需单独调整:
- Vercel:进入项目设置→Functions,将「Maximum payload size」改为50MB
- Netlify:在项目根目录创建
netlify.toml,添加配置:[functions] maxPayloadSize = 50000000 # 50MB - Cloudflare Pages:在项目设置→Functions中添加环境变量
NODEJS_DISABLE_WORKER_RUNTIME=true,规避Worker模式下的小限制(默认100MB)
3. 优化+server.js的请求体处理逻辑
处理大请求体时,确保读取方式正确:
// +server.js export async function POST({ request }) { // 处理JSON格式大请求体 const body = await request.json(); // 若处理二进制/超大文件,改用流式读取 // const reader = request.body.getReader(); // let data = []; // while (true) { // const { done, value } = await reader.read(); // if (done) break; // data.push(value); // } // const buffer = Buffer.concat(data); return new Response(JSON.stringify({ success: true })); }
4. 验证环境变量加载
可在+server.js中打印变量值,确认.env中的配置被正确读取:
console.log('当前请求体限制:', process.env.BODY_SIZE_LIMIT);
内容的提问来源于stack exchange,提问作者Kyle
相关产品推荐
相关产品推荐

