部署SvelteKit应用:如何在生产环境实现API代理至不同端口后端
SvelteKit生产环境API代理实现方案
方案一:基于SvelteKit Adapter Node自定义服务(推荐)
SvelteKit的adapter-node编译后会生成可执行的Node服务,你可以直接在此基础上扩展代理逻辑,无需额外搭建独立Express项目:
- 安装代理依赖:
npm install http-proxy-middleware - 确保项目已配置
adapter-node,执行编译:npm run build - 在项目根目录创建自定义
server.js文件:
import { createServer } from 'node:http'; import { handler } from './build/handler.js'; import { createProxyMiddleware } from 'http-proxy-middleware'; const server = createServer(handler); // 配置/api前缀的请求代理到后端 server.use( '/api', createProxyMiddleware({ target: 'http://你的后端域名或IP:端口', changeOrigin: true, pathRewrite: { '^/api': '' } // 若后端接口无/api前缀,可删除此配置 }) ); const PORT = process.env.PORT || 3000; server.listen(PORT, () => { console.log(`服务运行在端口 ${PORT}`); });
- 启动生产服务:
node server.js
方案二:利用部署平台的路由规则
如果你的应用部署到Vercel、Netlify、Cloudflare Pages等平台,直接用平台自带的重写/代理配置即可,无需编写额外服务代码:
- Vercel:在项目根目录创建
vercel.json
{ "rewrites": [ { "source": "/api/(.*)", "destination": "http://你的后端地址:端口/api/$1" } ] }
- Netlify:创建
_netlify.toml
[[redirects]] from = "/api/*" to = "http://你的后端地址:端口/api/:splat" status = 200 force = true
方案三:用Express独立托管编译后的静态文件
这种方式完全可行,适合已有Express服务栈的场景:
- 安装依赖:
npm install express http-proxy-middleware - 编译SvelteKit项目(若使用
adapter-static,需确保前端API请求路径配置正确):npm run build - 编写Express服务文件
server.js:
const express = require('express'); const { createProxyMiddleware } = require('http-proxy-middleware'); const path = require('path'); const app = express(); // 托管编译后的静态资源 app.use(express.static(path.join(__dirname, 'build'))); // 配置API代理 app.use( '/api', createProxyMiddleware({ target: 'http://你的后端地址:端口', changeOrigin: true }) ); // 处理SPA路由刷新问题,所有非API请求返回index.html app.get('*', (req, res) => { res.sendFile(path.join(__dirname, 'build', 'index.html')); }); const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`服务运行在端口 ${PORT}`); });
- 启动服务:
node server.js
内容的提问来源于stack exchange,提问作者Davide Ferrero
相关产品推荐
相关产品推荐

