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

GitHub Actions部署Next.js到Azure静态Web应用时出现INVALID_URL错误

解决Next.js部署Azure静态Web应用时API路由的ERR_INVALID_URL错误

问题根源

本地运行时,Next.js API路由的request.url是带完整协议和主机的URL(比如http://localhost:3000/api/reports?id=xxx),但在GitHub Actions构建/act模拟环境中,request.url可能仅为相对路径(比如/api/reports?id=xxx),直接用new URL(request.url)会因缺少协议头触发ERR_INVALID_URL错误。

可行解决方案

  • 补全基础URL再解析:在API路由处理函数中,先给相对路径补全基础URL,避免解析失败。示例代码:
    import { NextRequest } from 'next/server';
    
    export async function GET(request: NextRequest) {
      // 优先用环境变量的基础URL,本地默认localhost
      const baseUrl = process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000';
      // 用第二个参数作为基础URL,处理相对路径
      const url = new URL(request.url, baseUrl);
    
      // 正常获取查询参数
      const id = url.searchParams.get('id');
      const partitionKey = url.searchParams.get('partitionKey');
    
      // 后续业务逻辑...
      return new Response(JSON.stringify({ id, partitionKey }), { status: 200 });
    }
    
  • 设置构建环境变量:在GitHub Actions的构建步骤中,添加NEXT_PUBLIC_BASE_URL环境变量,值为你的Azure静态Web应用域名(比如https://your-azure-swa-name.azurestaticapps.net),确保构建和运行环境的URL解析一致。
  • 排查顶层执行代码:检查route.tsx中是否有顶层(不在处理函数内)的代码尝试解析request.url——这类代码会在构建阶段执行,而此时request对象不存在,直接触发错误。所有URL解析逻辑必须放在GET/POST等请求处理函数内部。
  • 对齐act模拟环境:用act测试时,添加和GitHub Actions一致的环境变量,比如:
    act -e .github/workflows/your-workflow.yml -s NEXT_PUBLIC_BASE_URL=https://your-azure-swa-name.azurestaticapps.net
    

验证步骤

  1. 本地运行npm run build && npm start,访问http://localhost:3000/api/reports?id=SOME_ID&partitionKey=SOME_KEY确认正常返回结果。
  2. 用act模拟构建流程,检查是否再无ERR_INVALID_URL错误。
  3. 推送代码到GitHub,等待Azure静态Web应用部署完成后,访问线上API路由验证功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 21:37:16