部署Redwood应用到Vercel后出现405 Method Not Allowed错误求助
排查Redwood+Supabase+Prisma应用Vercel部署后405 Method Not Allowed错误的思路
1. 补全vercel.json路由配置
Redwood部署到Vercel需要重写后端函数路由,否则静态资源路由会拦截API请求,导致405错误。创建项目根目录的vercel.json文件,写入以下配置:
{ "rewrites": [ { "source": "/.redwood/functions/:function(*)", "destination": "/api/:function(*)" }, { "source": "/(.*)", "destination": "/index.html" } ] }
这个配置会把Redwood默认的后端函数路径/.redwood/functions/*重定向到Vercel的API路径/api/*,同时把所有前端路由指向index.html,保证单页应用路由正常。
2. 检查Supabase的跨域与密钥配置
- CORS权限:登录Supabase控制台,进入项目的「API」设置,在「Allowed Origins」中添加Vercel部署域名(如
https://your-app.vercel.app),允许跨域请求。 - 密钥正确性:确认Vercel环境变量中配置的Supabase密钥(
SUPABASE_SERVICE_ROLE_KEY用于后端,SUPABASE_ANON_KEY用于前端)和Supabase控制台提供的一致,避免密钥错误导致请求被拦截。
3. 验证Prisma数据库连接
- 检查Vercel环境变量中的
DATABASE_URL是否为Supabase提供的Postgres连接字符串,需包含正确的用户名、密码、数据库名和端口。 - 查看Vercel部署日志,搜索「Prisma」相关条目,确认是否存在数据库连接失败、认证错误等信息,这类问题会间接导致API请求返回405。
4. 核对API请求方法与后端函数匹配
- 确认前端发起的请求HTTP方法(GET/POST/PUT等)和Redwood后端函数定义的方法一致。比如后端函数仅处理GET请求,前端发送POST就会触发405。
- 检查
api/src/functions下的函数代码,确保handler函数没有错误的方法限制逻辑,比如:
export const handler = async (event) => { // 错误示例:仅允许GET,但前端发了POST if (event.httpMethod !== 'GET') { return { statusCode: 405, body: 'Method Not Allowed' }; } // 业务逻辑代码 };
5. 查看Vercel函数日志定位问题
进入Vercel项目控制台的「Functions」页面,找到对应的Redwood函数,查看请求详情日志,包括请求路径、HTTP方法、返回状态码及错误信息,这是最直接的问题定位方式。
内容的提问来源于stack exchange,提问作者Nicolas Chusseau
相关产品推荐
相关产品推荐

