Next.js Discord

Discord Forum

revalidateTag doesnt work

Unanswered
Akita posted this in #help-forum
Open in Discord
AkitaOP
Hi, revalidateTag doesnt work on production, how can i resolve that?

fetch

const res = await fetch(returnApiUrl('/api/events'), {
            next: {
                tags: ['events']
            },
        })


on server action

revalidateTag('events')
after create.

27 Replies

AkitaOP
Does someone have an example how it works?
Most likely the data is being cached
By that i mean client side cached
After doing revalidateTag, does refreshing solve the issue?
AkitaOP
No, but i found the solution
I forgot to add force-dynamic
to route
@Akita I forgot to add force-dynamic
Yeah but that would disable the caching. So revalidateTag is essentially useless then.
AkitaOP
So
what can i do?
Depends. If you dont want caching you can let it be.
AkitaOP
i want caching
@Clown is there an example
how can i do that with revalidateTag?
I dont know what i m doing wrong
You'll have to do router.refresh()
AkitaOP
i m doing it
After the revalidate
AkitaOP
i m refreshing the page
still not updated
:/
European sprat
Time to show more code to see if something is being done wrong
AkitaOP
Ok
route.ts
import {NextResponse} from "next/server";
import {UseSettings} from "@/../lib/mysql";

export async function GET() {
    try {
        const currentDate = new Date()
        const dateFrom6Days = addMinutesToDate(currentDate, 6 * 24 * 60)

        const getEvents = await UseSettings({
            query: 'SELECT * from events WHERE STR_TO_DATE(concat(month, \'/\', day, \'/\', year, \' \', hour, \':\', minute, \':00\'), \'%m/%d/%Y %H:%i:%s\') BETWEEN ? AND DATE_ADD(?, INTERVAL 6 DAY)',
            params: [currentDate, dateFrom6Days]
        })
        if(!getEvents)
            return NextResponse.json({ error: "Internal Server Error"}, {status: 500})
        return NextResponse.json({
            result: getEvents
        })
    } catch(err) {
        return NextResponse.json({ error: "Internal Server Error"}, {status: 500})
    }
}


get function

import {returnApiUrl} from "@/utils/general";
import {ApiResponse, EventInterface} from "@/interfaces/interfaces";

export async function getEvents() {
    try {
        const res = await fetch(returnApiUrl('/api/events'), {
            next: {
                tags: ['events']
            },
        })
        
        if(!res.ok)
            throw new Error('Internal Server Error!')
        
        const { result } = await res.json() as ApiResponse<EventInterface[]>

        return result
    } catch(err) {
        console.log(err)
        return []
    }
}


call getEvents from page.tsx

export default async function Page() {
    const events = await getEvents()
}



when i m creating a new event

'use server'

export async function createEvent(data) {
  ...create event in database then...
    revalidateTag('events')
    return true;  
}


calling server action on client page

const router = useRouter();
const handleCreate = async () => {
  const request = await createEvent(data)
  router.refresh();
}
@European sprat
AkitaOP
Can someone help me?
@Akita did you figure this out? It doesn't work for me in Server Actions for 13.5.4