使用 getStaticProps() 将 Next.js 部署到 Vercel 的速率限制问题
Posted
技术标签:
【中文标题】使用 getStaticProps() 将 Next.js 部署到 Vercel 的速率限制问题【英文标题】:Rate limit issue deploying Next.js to Vercel using getStaticProps() 【发布时间】:2020-12-23 01:50:09 【问题描述】:使用连接到 Apollo 的 Next.js,我有 50 个左右的非动态 URL 使用 getStaticProps()
获取数据。它工作得很好,我喜欢页面加载的方式。我面临的问题是,因为 Vercel 在构建时构建了这些页面的静态版本,所以在大约 40 个之后,我很快就达到了这些页面上使用的 API 的速率限制。建成。鉴于我无法控制这些速率限制,有没有办法限制我在每个 getStaticProps
中的数据调用,以便在构建时分隔这些数据调用?我的getStaticProps
在每个页面上看起来都是这样的:
export async function getStaticProps()
const apolloClient = initializeApollo()
await apolloClient.query(
query: XXXXXXX,
variables: handle: "XXXXXXX"
)
return
props:
initialApolloState: apolloClient.cache.extract(),
,
revalidate: 1,
一切正常,或者当我的页面较少并且没有足够的页面达到速率限制时。
【问题讨论】:
【参考方案1】:我最终通过在 promise 中抛出一个包含我的请求的 setTimeout 将我的请求限制了 100 毫秒。在生产构建期间完全按照预期工作。
const sleep = (milliseconds, apolloClient) =>
return (
new Promise(function(resolve, reject)
setTimeout(() =>
const request = apolloClient.query(
query: XXXXXX,
variables: handle: "XXXXXX"
);
resolve(request);
, milliseconds)
);
)
;
导出异步函数 getStaticProps() const apolloClient = initializeApollo()
await sleep(200, apolloClient)
return
props:
initialApolloState: apolloClient.cache.extract(),
,
revalidate: 1,
【讨论】:
以上是关于使用 getStaticProps() 将 Next.js 部署到 Vercel 的速率限制问题的主要内容,如果未能解决你的问题,请参考以下文章
使用 HOC 包装时,组件不会从 getStaticProps 接收道具
在 NextJS 中使用 Snowflake 无法连接或执行 getStaticPaths/getStaticProps 中的查询
使用 getStaticProps 获取数据 Next.js 和 Typescript
NextJS getStaticProps 没有将返回的道具传递给页面