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

Next.js 13.4.7项目构建未包含API文件,本地正常部署异常

Next.js 13.4.7 API路由构建后缺失问题

我有一个版本为13.4.7的Next.js项目,在路径src/app/api/send-mail/route.js下创建了一个用于发送邮件的POST API接口。该接口在本地环境运行正常,但部署网站时,构建产物中未包含此API文件。

我的API文件代码

import { NextResponse } from "next/server";
import sgMail from "@sendgrid/mail";

sgMail.setApiKey(process.env.SENDGRID_API_KEY);

export async function POST(request) {
let response;
try {
const req = await request.json();

console.log(req, "REQ");

const msg = {
  to: "test@yopmail.com",
  from: "test1@gmail.com",
  subject: "test subject",
  html: `Sample HTML"
};

sgMail
  .send(msg)
  .then(() => {
    response = { "message": "Email sent succesfully.", "status": 200 };
  })
  .catch((error) => {
    console.log(error, "ERROR");
    response = { "message": "Something went wrong.", "status": 400 };
  });
 } catch (err) {
   response = { "message": "Something went wrong." };
   console.log(err, "ERROR");
 }
return NextResponse.json({...response});
}

构建输出

执行npm run build后,构建产物中未包含该API路由,构建日志也未显示对该文件的处理记录。


问题原因及解决方案

1. 语法错误(核心问题)

代码中存在未闭合的模板字符串:html: Sample HTML"` 里的反引号没有闭合,这会导致构建时语法检查失败,Next.js会跳过该文件的编译。

修复方法:
将模板字符串闭合:

html: `Sample HTML`

2. 异步竞态问题(附加优化)

原代码用then/catch处理异步操作,会导致函数提前返回,此时response可能还未赋值,出现返回值异常。建议改用await简化逻辑:

修正后的完整代码:

import { NextResponse } from "next/server";
import sgMail from "@sendgrid/mail";

sgMail.setApiKey(process.env.SENDGRID_API_KEY);

export async function POST(request) {
  let response;
  try {
    const req = await request.json();
    console.log(req, "REQ");

    const msg = {
      to: "test@yopmail.com",
      from: "test1@gmail.com",
      subject: "test subject",
      html: `Sample HTML`
    };

    await sgMail.send(msg);
    response = { message: "Email sent successfully.", status: 200 };
  } catch (err) {
    response = { message: "Something went wrong.", status: 400 };
    console.log(err, "ERROR");
  }
  return NextResponse.json(response);
}

3. 路由结构验证

确认文件路径严格遵循App Router规则:src/app/api/send-mail/route.js,检查文件夹名、文件名是否存在拼写错误(比如误写为routes.js)。

4. 构建配置检查

打开next.config.js,确保没有配置排除src/app/api目录的规则,同时确认experimental.appDir未被手动关闭(Next.js 13.4+默认开启App Router)。

5. 依赖确认

运行npm list @sendgrid/mail,确保@sendgrid/mail在dependencies中(而非devDependencies),生产构建会忽略开发依赖包,可能导致路由编译失败。

完成以上步骤后,重新执行npm run build,即可看到API路由被纳入构建产物。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:33:22