NextJS 应用程序生产中 API 调用请求超时

问题描述 投票:0回答:1

我的 NextJS 应用程序存在一个严重问题,即对我的 API 路由的所有请求在生产中都超时。直到最近它都可以完美运行,但现在我的应用程序无法使用(静态登录页面除外)。它在我当地的环境中运行得很好。

我正在使用 NextJS 14.0.1 和 App Router; MongoDB + 猫鼬

以下是来自简单 /api/lead 端点的定时日志(在数据库中创建线索)

// app/api/leads/route.js

import { NextResponse } from "next/server";
import connectMongo from "@/libs/mongoose";
import Lead from "@/models/Lead";

export async function POST(req) {
  console.time("MongoDB Connection");
  await connectMongo();
  console.timeEnd("MongoDB Connection");

  console.time("Request JSON Parsing");
  const body = await req.json();
  console.timeEnd("Request JSON Parsing");

  if (!body.email) {
    return NextResponse.json({ error: "Email is required" }, { status: 400 });
  }

  try {
    console.time("Finding Lead");
    const lead = await Lead.findOne({ email: body.email });
    console.timeEnd("Finding Lead");

    if (!lead) {
      console.time("Creating Lead");
      await Lead.create({ email: body.email });
      console.timeEnd("Creating Lead");
    }

    console.time("Sending Response");
    const response = NextResponse.json({});
    console.timeEnd("Sending Response");
    return response;
  } catch (e) {
    console.error("Database operation failed", e);
    console.time("Sending Error Response");
    const errorResponse = NextResponse.json(
      { error: e.message },
      { status: 500 }
    );
    console.timeEnd("Sending Error Response");
    return errorResponse;
  }
}

  • MongoDB 连接:880.541ms
  • 请求JSON解析:0.913ms
  • 寻找引线:556.57ms
  • 发送响应:1.31ms

通过邮递员获取此信息时,我仍然需要 10 秒以上才能收到响应。 Netlify / Vercel 上的默认超时发生在 10 秒后。

Netlify Logs Screenshot

浏览器控制台中没有错误,在“网络”选项卡中检查请求也没有帮助。

到目前为止我做了什么:

  • 检查所有最近的提交以识别任何相关更改(无)
  • 将主分支重置为之前的提交并部署以查看它是否有效(无效)
  • 从本地环境连接到生产数据库 -> 正常工作
  • 尝试通过本地 https ngrok 隧道使用该应用程序 -> 有效
  • 已验证它仅影响触发数据库操作的请求
  • 尝试在 Vercel 和 Netlify 上部署 -> 同样的问题
  • 向端点内的所有操作添加定时日志以测量执行时间 -> 参见下文
  • 启动了一个新的 MongoDB 集群并连接到这个新实例 -> 同样的问题

有什么想法可能是这里的问题吗?我没主意了。

编辑:Here's an additional timed log

mongodb mongoose next.js vercel netlify
1个回答
0
投票

在探索了很多可能的问题之后,我设法通过升级所有依赖项并通过删除 Posthog 来解决该错误。似乎该库的依赖项之一存在一些问题。不知道为什么这个错误只会导致应用程序在生产时崩溃,但是还好。希望这可以在未来为其他人节省几个小时。

© www.soinside.com 2019 - 2024. All rights reserved.