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

部署后NextJS客户端无法向Go服务器发送POST/PUT/DELETE请求

问题分析与解决方案

从错误日志来看,你代码中指定的POST请求最终被发送为GET,导致Go后端返回405 Method Not Allowed。结合开发环境正常、Postman测试正常的情况,重点排查以下几个核心问题:

1. 补全NextJS API函数的请求体解析

你的API函数直接使用了clinic变量,但没有从前端请求中解析获取该数据,这会导致发送给Go后端的请求体为空/undefined,可能触发服务器异常处理逻辑(比如重定向)。修改API函数:

if (req.method === 'POST') {
    try {
        // 新增:解析前端传入的请求体
        const clinic = await req.json();
        const response = await axios.post(`${process.env.NEXT_PUBLIC_URL}/admin/create-clinic`, clinic, {
            headers: {
                'Content-Type': 'application/json',
            },
            withCredentials: true
        })
        const data = await response.data
        return res.end(JSON.stringify(data))
    } catch (err) {
        console.log(err)
        return res.end(JSON.stringify({"error": err.message }))
    }
}

2. 检查环境变量NEXT_PUBLIC_URL的格式

确保NEXT_PUBLIC_URL的末尾没有斜杠,比如应为https://your-go-server.com而非https://your-go-server.com/。如果带斜杠,拼接后会生成https://your-go-server.com//admin/create-clinic这类错误路径,部分服务器会将其重定向到正确路径,而POST请求在重定向过程中会被转为GET,最终触发405错误。

3. 禁用Axios的自动重定向

在API函数的Axios请求中添加maxRedirects: 0配置,阻止自动重定向,这样如果存在重定向场景,会直接抛出错误,便于定位问题:

const response = await axios.post(`${process.env.NEXT_PUBLIC_URL}/admin/create-clinic`, clinic, {
    headers: {
        'Content-Type': 'application/json',
    },
    withCredentials: true,
    maxRedirects: 0 // 新增:禁用自动重定向
})

4. 验证Go后端的HTTPS强制配置

如果Go后端配置了强制HTTPS(比如通过中间件将HTTP请求重定向到HTTPS),而NEXT_PUBLIC_URL配置的是HTTP地址,请求会被重定向,POST会转为GET。确保NEXT_PUBLIC_URL使用HTTPS协议。

5. 检查Vercel的路由规则配置

查看Vercel项目的vercel.json文件,确认是否存在自定义的重写/重定向规则,这些规则可能意外修改了请求方法,比如错误的路由规则可能将POST请求转为GET。


内容的提问来源于stack exchange,提问作者Wai Yan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:03:08