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

Next.js部署Azure CI Pipeline后API路由报500错误,本地运行正常

Next.js部署Azure后中间件配置matcher导致API 500错误排查与解决

问题描述

本地运行正常的Next.js应用,部署到Azure CI Pipeline后所有API路由返回500错误。排查发现:

  • 中间件未配置matcher时,API响应正常;
  • 一旦添加matcher: ['/api/(.*)']配置,所有API请求触发500内部服务器错误。

项目结构:

--------src
      |
      ----middleware
      |
      ----pages
               |
               ----api

核心问题排查与解决方案

1. 代码逻辑错误:转义的逻辑与操作符

你的代码中误用了HTML实体&&而非JavaScript逻辑与&&,导致条件判断失效——原本应跳过JWT验证的路由(如/api/user下除getall外的路径)会进入else分支,触发不必要的JWT验证流程,进而引发500错误。

修复方法:
将代码中的&&替换为&&:

if (reqUrl.startsWith('/api/user') && reqUrl !== '/api/user/getall') {
    // TODO: Implement any middleware logic related to register
    return NextResponse.next()
}

2. 中间件文件位置不符合Next.js规范

Next.js要求middleware.js/ts必须放置在项目根目录或src目录的根层级,不能放在单独的middleware文件夹中。错误的位置会导致部署后中间件加载异常,尤其在Azure环境下。

修复方法:
调整文件结构,将中间件文件移至src根目录:

--------src
      |
      ----middleware.js
      |
      ----pages
               |
               ----api

3. Azure环境变量未正确配置

代码依赖process.env.JWT_SECRET进行JWT验证,若Azure部署时未配置该环境变量,会使用默认密钥,但生产环境可能因权限或配置问题导致密钥无法正确读取,引发JWT验证错误返回500。

修复方法:

  • 登录Azure Portal,进入对应应用服务的「配置」→「应用程序设置」;
  • 添加JWT_SECRET变量,值与本地开发环境一致;
  • 重启应用服务确保配置生效。

4. Matcher规则优化(可选)

若应用配置了basePath,需在matcher规则中包含basePath,否则会导致路径匹配异常。同时可使用更符合Next.js规范的匹配语法:

export const config = {
    // 适配basePath的示例,若有basePath则替换为实际值
    matcher: ['/api/:path*'],
}

验证步骤

  1. 修正代码中的逻辑与操作符,调整中间件文件位置;
  2. 在Azure中确认JWT_SECRET环境变量已配置;
  3. 重新部署应用,查看Azure应用服务的「日志流」,确认中间件的console.log('In middleware...')是否正常输出;
  4. 测试API路由,检查是否返回预期响应而非500错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:53:19