You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何增大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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 12:10:17