AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 76936730
Accepted
TungTung
TungTung
Asked: 2023-08-20 03:28:30 +0800 CST2023-08-20 03:28:30 +0800 CST 2023-08-20 03:28:30 +0800 CST

如何禁用缓存数据并在每次客户端访问 Next.js 中的页面时更新

  • 772

我正在尝试使用api路由来调用数据库并使用数据来显示表格。当它在本地主机中时,一切正常。但是,我在Vercel上部署后,数据没有更新,它总是在部署时显示数据(即使我将缓存设置为它也使用缓存数据?),这意味着数据没有每次都请求no-store数据库页面加载的时间。

import { EventsSchema, columns } from "./components/columns";
import { DataTable } from "@/app/match/components/data-table";

async function getData(): Promise<EventsSchema[]> {
  const data = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/api/event`, {cache: "no-store",
}).then((res) => res.json());
  return data;
}

export default async function Match() {
  const data = await getData();
  return (
    <>
      <DataTable data={data} columns={columns} />
    </>
  );
}

/api/事件:

import { connectToDB } from "@/app/utils/database";
import Events from "@/models/events";

export const GET = async () => {
  try {
    await connectToDB();
    const events = await Events.find({}).select(
      "-_id -id -expireAt -homeNmae -awayName -competition"
    )
    return new Response(JSON.stringify(events), { status: 200 });
  } catch (error) {
    return new Response("Failed to fetch all events", { status: 500 });
  }
};

我也尝试过revalidatePath,但是数据仍然没有更新。

import { NextRequest, NextResponse } from "next/server";
import { revalidatePath } from "next/cache";

export async function GET(request: NextRequest) {
  const path = request.nextUrl.searchParams.get("/match") || "/";
  revalidatePath(path);
  return NextResponse.json({ revalidated: true, now: Date.now() });
}

请问为什么以及如何让客户端每次加载页面时都向数据库请求(如果客户端数量较多的话,对数据库和应用程序的要求会不会太高,如果是的话,如何加载)平衡?)?

next.js
  • 1 1 个回答
  • 19 Views

1 个回答

  • Voted
  1. Best Answer
    Youssouf Oumar
    2023-08-20T05:40:12+08:002023-08-20T05:40:12+08:00

    这是因为在app目录和生产环境中,Next.js 默认情况下会将所有获取的数据缓存在 API 路由和服务器组件中。

    对于您的cache: "no-store",如果您调用外部 API,那就没问题了。但是,您似乎在应用相同逻辑的情况下调用内部 API,您可以使用Route Segment Config进行控制,因为您似乎使用 ORM:

    export const dynamic = 'force-dynamic';
    
    import { connectToDB } from "@/app/utils/database";
    import Events from "@/models/events";
    
    export const GET = async () => {
      try {
        await connectToDB();
        const events = await Events.find({}).select(
          "-_id -id -expireAt -homeNmae -awayName -competition"
        )
        return new Response(JSON.stringify(events), { status: 200 });
      } catch (error) {
        return new Response("Failed to fetch all events", { status: 500 });
      }
    };
    
    • 1

相关问题

  • ReferenceError:Next.js 中未定义文档

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    使用 <font color="#xxx"> 突出显示 html 中的代码

    • 2 个回答
  • Marko Smith

    为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类?

    • 1 个回答
  • Marko Smith

    您可以使用花括号初始化列表作为(默认)模板参数吗?

    • 2 个回答
  • Marko Smith

    为什么列表推导式在内部创建一个函数?

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 个回答
  • Marko Smith

    为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)?

    • 4 个回答
  • Marko Smith

    为什么库中不调用全局变量的构造函数?

    • 1 个回答
  • Marko Smith

    std::common_reference_with 在元组上的行为不一致。哪个是对的?

    • 1 个回答
  • Marko Smith

    C++17 中 std::byte 只能按位运算?

    • 1 个回答
  • Martin Hope
    fbrereto 为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 您可以使用花括号初始化列表作为(默认)模板参数吗? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi 为什么列表推导式在内部创建一个函数? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A fmt 格式 %H:%M:%S 不带小数 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python C++20 的 std::views::filter 未正确过滤视图 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute 为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa 为什么库中不调用全局变量的构造函数? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis std::common_reference_with 在元组上的行为不一致。哪个是对的? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev 为什么编译器在这里错过矢量化? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan C++17 中 std::byte 只能按位运算? 2023-08-17 17:13:58 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve