有时(大概一半时间),当我在我正在处理的网站上加载一个页面时,我会收到一个类似于这的错误。
429: TOO_MANY_REQUESTS 代码: INTERNAL_FUNCTION_RATE_LIMIT 编号: lhr1::258d8-1638206479250-0a01c8648601
我的网站还没有启动,几乎没有人访问它,只有我,所以它不可能有太多的流量。
我正在加载的页面有一个getServerSideProps()函数,它只做一件事--使用prisma从我的数据库中获取帖子,然后发送给我的组件来呈现。
我无法想象是什么导致了太多的请求。
我的vercel使用量统计数据看起来像这。
我做错了什么?是什么导致了这一切?我如何调试这个?
供参考,下面是我所有的相关代码。有没有机会让你看看,如果你对可能发生的事情有什么想法的话,让我知道?
index.tsx有getServerSideProps()函数,它调用getPosts()函数来获取帖子。
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查询并获取帖子.
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的
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发布于 2021-11-29 21:09:12
尝试使用getInitialProps,它将在浏览器上执行您的功能,而getServerSideProps总是在用户刷新页面或遍历站点时创建循环。
至于为什么会有这么多请求,我认为当客户端遍历您的站点时,您会在循环中生成对您的功能的访问。
https://stackoverflow.com/questions/70158903
复制相似问题