为什么我在使用React Suspense的NextJS 13.4的流功能时会出现“连接关闭”错误?

uajslkp6  于 2023-10-18  发布在  React
关注(0)|答案(2)|浏览(103)

Error Image
当我试图加载两个以上的数据与悬念(流)发生上述错误。我使用的是Next JS 13.4和App Router。

export const serverApi = async <T>(
  url: string,
  init?: RequestInit
): Promise<T> => {
  const response = await fetch(BASE_URL.API + url, init);
  if (!response.ok) {
    throw new Error(response.statusText);
  }
  return await (response.json() as Promise<T>);
};
export const getArticles = async () => {
  return await serverApi<Article[]>(API.ARTICLES, {
    cache: "no-store",
  });
};

export const getArticle = async (id: string) => {
  return await serverApi<Article>(API.ARTICLE_WITH_ID(id), {
    cache: "no-store",
  });
};
const Header = async () => {
  return (
    <header className="relative w-full flex items-center justify-center">
      <div />
      <HeaderNavigation />
      <Suspense fallback={<HeaderProfileSpinner />}>
        {/* @ts-ignore */}
        <HeaderProfile />
      </Suspense>
    </header>
  );
};

const HeaderProfile = async () => {
  const cookie = getCookie();
  const queryClient = getQueryClient();

  await queryClient.prefetchQuery(USER_QUERY_KEYS.me(), () =>
    getUserMe(cookie)
  );

  const dehydratedState = dehydrate(queryClient);

  return (
    <Hydrate state={dehydratedState}>
      <HeaderProfileImage />
    </Hydrate>
  );
};

我是这样使用API的。我使用页面路由器的API。有关更多细节,我使用Prisma用于ORM,Postgres(Supplement)用于DB,并使用Vercel部署。我认为“连接关闭”意味着服务器在其中一个流解决时中止连接,这不像我预期的那样。我认为流媒体的全部意义在于并行渲染多个内容,但它不起作用。这是有点奇怪的错误不发生在localhost。

lvmkulzt

lvmkulzt1#

与流媒体没有直接关系,但任何人处理这个连接关闭错误,我的网站工作正常,直到随机它会崩溃后5-10秒,这个错误以及。它在我的本地环境中工作得很好,但我在Vercel上部署的站点却不行。
我尝试了很多东西,没有任何工作,直到我简单地将我的下一个从v13.3升级到v13.4.12,它解决了这个问题。如果你正在处理同样的问题,我建议你先尝试从当前版本升级/降级,看看是否有效。

jfewjypa

jfewjypa2#

这个答案不是关于Suspense的,但我遇到了这个错误,并通过升级Next到latest解决了这个问题。
在我的橱窗里,我也看到了这个:

也许这将有助于未来的人。

yarn upgrade next

yarn add next@latest

相关问题