首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我部署在Vercel上的网站一直给我"429: TOO_MANY_REQUESTS“错误。可能出了什么问题,我如何调试?

我部署在Vercel上的网站一直给我"429: TOO_MANY_REQUESTS“错误。可能出了什么问题,我如何调试?
EN

Stack Overflow用户
提问于 2021-11-29 17:34:09
回答 1查看 514关注 0票数 1

有时(大概一半时间),当我在我正在处理的网站上加载一个页面时,我会收到一个类似于的错误。

429: TOO_MANY_REQUESTS 代码: INTERNAL_FUNCTION_RATE_LIMIT 编号: lhr1::258d8-1638206479250-0a01c8648601

我的网站还没有启动,几乎没有人访问它,只有我,所以它不可能有太多的流量。

我正在加载的页面有一个getServerSideProps()函数,它只做一件事--使用prisma从我的数据库中获取帖子,然后发送给我的组件来呈现。

我无法想象是什么导致了太多的请求。

我的vercel使用量统计数据看起来像

我做错了什么?是什么导致了这一切?我如何调试这个?

供参考,下面是我所有的相关代码。有没有机会让你看看,如果你对可能发生的事情有什么想法的话,让我知道?

index.tsx有getServerSideProps()函数,它调用getPosts()函数来获取帖子。

代码语言:javascript
复制
import Layout from 'components/Layout/Layout'
import PostFeed from 'components/Posts/PostFeed'
import Subnav from 'components/Layout/Subnav'
import Pagination from 'components/Posts/Pagination'
import ProfileHeader from 'components/Users/ProfileHeader'
import TagHeader from 'components/Layout/TagHeader'
import HomeHeader from 'components/CTAs/HomeHeader'
import SubscribeBox from 'components/CTAs/SubscribeBox'
import AdBoxes from 'components/CTAs/AdBoxes'

export default function browse({ posts, postCount, username }) {
  return (
    <Layout subnav={<Subnav />}>
      <PostFeed posts={posts} />
      <Pagination postCount={postCount} />
      <AdBoxes/>
      <SubscribeBox />
      <br />
    </Layout>
  )
}

import { getPosts } from 'prisma/api/posts/get-posts'
import config from 'config.json'

export async function getServerSideProps({ req, query }) {
  const { username, sort, tag, search } = query
  const { posts, postCount } = await getPosts({
    published: true,
    searchString: search,
    username: username,
    tagSlug: tag,
    sort: sort,
    skip: config.postsPerPage * (parseInt(query.page?.toString()) - 1 || 0),
    take: config.postsPerPage,
  })
  return { props: { posts, postCount, username } }
}

get-posts.ts运行prisma查询并获取帖子.

代码语言:javascript
复制
import prisma from 'prisma/prismaClient'

export async function getPosts({ username, published, tagSlug, searchString, sort, skip, take }) {
  console.log(`Get posts. Sorting: ${sort}`)
  // Filter posts by user (to show them on their profile)
  let author
  if (username) author = await prisma.user.findUnique({ where: { username } })
  // Filter by tag
  const tagFilter = tagSlug ? {
    tags: { some: { slug: tagSlug } }
  } : {}
  // Search through posts
  const search = searchString ? {
    OR: [
      { title: { contains: searchString, mode: "insensitive", } },
      { body: { contains: searchString, mode: "insensitive", } },
      { tags: { some: { name: { contains: searchString, mode: "insensitive", } } } },
      { author: { username: { contains: searchString, mode: "insensitive", } } },
    ],
  } : {}

  let orderBy = [{ rank: 'desc' }]
  if (sort === 'new') orderBy = [{ createdAt: 'desc' }]
  if (sort === 'top') orderBy = [{ score: 'desc' }]

  const allFilters = {
    authorId: author?.id,
    published: published,
    ...search,
    ...tagFilter,
  }
  const [posts, postCount] = await prisma.$transaction([
    prisma.post.findMany({
      where: allFilters,
      orderBy: orderBy, //rank: 'desc' //score: 'desc'
      take, skip,
      include: {
        tags: true,
        author: {
          select: {
            username: true
          }
        },
        upvoters: {
          select: {
            username: true
          }
        },
        // Just for the comment counter
        comments: {
          select: {
            id: true
          }
        }
      }
    }),
    prisma.post.count({ where: allFilters })
  ])

  return { posts, postCount }
}

prismaClient -prismaClient是用来连接prisma

代码语言:javascript
复制
import { PrismaClient } from "@prisma/client";

// PrismaClient is attached to the `global` object in development to prevent
// exhausting your database connection limit.
//
// Learn more: 
// https://pris.ly/d/help/next-js-best-practices

let prisma: PrismaClient

if (process.env.NODE_ENV === 'production') {
  prisma = new PrismaClient()
} else {
  if (!global.prisma) {
    global.prisma = new PrismaClient()
  }
  prisma = global.prisma
}
export default prisma
EN

回答 1

Stack Overflow用户

发布于 2021-11-29 21:09:12

尝试使用getInitialProps,它将在浏览器上执行您的功能,而getServerSideProps总是在用户刷新页面或遍历站点时创建循环。

至于为什么会有这么多请求,我认为当客户端遍历您的站点时,您会在循环中生成对您的功能的访问。

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

https://stackoverflow.com/questions/70158903

复制
相关文章

相似问题

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