首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Vercel上部署的Nextjs中api请求出现504/502错误

在Vercel上部署的Nextjs中api请求出现504/502错误
EN

Stack Overflow用户
提问于 2021-05-09 19:04:28
回答 3查看 2.1K关注 0票数 3

我已经用Next.js开发了一个应用程序。对于后端,我使用了在Nextjs中配置的api端点,这些端点位于pages/api内部。api端点经常返回502(网关超时错误)或504(我们的部署有问题)。

通过一些研究,我发现这是因为服务器超时。对于我部署了Nextjs应用程序的Vercel,无服务器函数的最大超时时间是10s。

其中一个端点(https://bulkbays.com/api/fetchSections)的代码为

代码语言:javascript
运行
复制
import db from "../../config/db";
import Section from "../../Models/Section";

db();

export default async function handler(req, res) {

    console.log('Entered the serverless function')

    Section.find()
        .lean()
        .then((sections) => {
            console.log('Fetched Sections',sections)
            return res.json(sections);
        })
        .catch((err) => {
            console.log('Error in fetching sessions',err)
            return res.json({
                status: false,
                msg: "An unexpected problem occured",
                err,
            });
        });
}

请告诉我怎么会超过10秒。这是我们能做的最简单的查询。此外,该查询的结果只是一个长度为9的数组,其中对象是项,值是字符串。它看起来像这样

代码语言:javascript
运行
复制
[
  {
  "_id":"6092a55478ccc2092c5e41b0",
  "images":["http://res.cloudinary.com/bulkbays97/image/upload/v1620223428/eysvsch2hf4ymajizzcn.jpg","http://res.cloudinary.com/bulkbays97/image/upload/v1620223429/qiwa2idfrntiygsfmnx2.jpg","http://res.cloudinary.com/bulkbays97/image/upload/v1620223429/elwhjk7abwcde7ccqcxf.jpg","http://res.cloudinary.com/bulkbays97/image/upload/v1620223428/yuzhe8iehcyj1rmfyr09.jpg"],
  "title":"P-Caps",
  "createdAt":"2021-05-05T14:01:56.626Z",
  "updatedAt":"2021-05-05T14:01:56.626Z","__v":0
  },
  ....
]

这是发送502或504响应的请求之一的日志

代码语言:javascript
运行
复制
[GET] /api/fetchSections
14:36:34:38
Status:-1
Duration:10010.32 ms
Init Duration: N/A
Memory Used:60 MB
ID:x7lh8-1620552994128-a44f049a01ae
User Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0
2021-05-09T09:36:44.511Z 62c16977-9c5c-42f5-961f-a63083638a9c Task timed out after 10.01 seconds

关于这个请给我指点一下。我该怎么办?我是不是应该使用Heroku(不是无服务器)之类的东西来做这件事呢?

我为一个客户做了这个网站,现在我不知道是什么问题导致了这个问题。

EN

回答 3

Stack Overflow用户

发布于 2021-05-18 17:28:47

作为不断研究的结果,我在Heroku上发布了API,在Vercel上发布了前端。我在一个stackoverflow帖子中读到了这个建议,他说他在Vercel工作,这是最适合这个问题的解决方案。

我认为这是无服务器架构本身的问题。我尝试在netlify上部署Nextjs,遇到了类似的情况。

票数 2
EN

Stack Overflow用户

发布于 2021-05-14 17:10:49

首先尝试隔离问题的来源,这样您就知道下一步要采取什么步骤。

例如,尝试在不使用或连接到DB的情况下返回一些虚拟数据。

代码语言:javascript
运行
复制
export default async function handler(req, res) {

    console.log('Entered the serverless function')

    return { "dummy": "data"}
}

如果您仍然有超时问题,您现在知道这可能是因为您的Vercel设置。

如果NextJS设置不是问题所在,那么您就知道问题是由您的数据库引起的。问题要么出在查询本身,要么出在连接上。

我不确定您使用的是什么DB (从语法上看,我假设它是MongoDB )。

最有可能的解决方案:

  • 我们不太清楚db()是做什么的,或者它是什么。我假设它处理到MongoDB实例的连接。无论哪种方式,都要确保检查db()函数是否是异步的。这是一个常见的错误;如果函数是异步的,而您没有正确地调用它,那么超时可能是由这个异步问题引起的。
  • 您是为每个请求创建新的连接还是重用现有的打开的连接?每次创建新连接的代价可能很高;这可能是导致超时问题的原因。

如果这些都不起作用,请尝试以下方法:

  • 您的数据库是如何托管的?是由Vercel管理的吗?尝试使用其他管理器来查看问题所在。
  • 是否在您的Vercel仪表板中正确设置了所有内容?请确保具有正确的MongoDB连接字符串,并将MongoDB实例设置为接受来自应用程序的连接。
票数 1
EN

Stack Overflow用户

发布于 2022-01-12 00:17:16

我也面临着同样的问题

任务在10.01秒后超时

使用连接到MongoDB(图集)的Next.js应用编程接口端点。对我来说,根本原因实际上是MongoDB中的网络访问被设置为我自己的IP地址,因此不允许我部署的应用程序访问。对于那些在使用Next.js功能时遇到相同问题的人,还请检查MongoDB是否正确配置为接受来自您自己的IP以外的IP地址的连接。

有关上下文,请参阅以下内容:

注意: Vercel使用动态IP地址,因此您需要在MongoDB仪表板中添加一个例外,以便从任何IP地址进行访问。为此,请简化导航至网络访问选项卡,单击添加IP地址按钮,然后单击允许从任何位置访问按钮,或在访问列表条目中输入0.0.0/0。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67456980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档