revalidateTag doesnt work
Unanswered
Akita posted this in #help-forum
AkitaOP
Hi, revalidateTag doesnt work on production, how can i resolve that?
fetch
on server action
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