Intento usar una función completamente nueva lanzada en NextJS v.12.1 https://deepinder.me/nextjs-on-demand-isr . La API en sí funciona bien. Puedo alcanzarlo. Pero a cambio devuelve un error 500 que dice que res.unstable_revalidate is not a function . No funciona ni en desarrollo ( next server && next dev desarrollo) ni en producción ( next build && next start ).
Este es el punto final de la API:
// ./api/misc/revalidate const revalidateCache = async (_, res) => { console.log(res.unstable_revalidate, 'TEST REVALIDATE'); // res.unstable_revalidate is undefined here :( try { await res.unstable_revalidate('/'); return res.json({ revalidated: true }); } catch (err) { return res.status(500).send(`Error revalidating: ${err}`); } }; export default revalidateCache;Esta es la invocación:
// ./apps/client/services/server const getRevalidate = async () => { await fetch('/api/misc/revalidate'); }; export default getRevalidate;Ver la capa desde la que llamo:
// .src/pages/index.js // ...some code here const HomePage = ({ page, legacy }) => { const handleClick = () => { getRevalidate(); }; return ( <div className={styles.homeRoot}> <button onClick={handleClick}>REVALIDATE</button> </div> ); }; UPD: uso express para manejar la abstracción de API.
import express from 'express'; import revalidateCacheApi from './api/misc/revalidate'; export default app => { // ...some code here app.use('/api/misc/revalidate', revalidateCacheApi); };NVM. Era un problema con mi servidor local. Utilizo una configuración avanzada con dos instancias independientes (:3000 y:4000) girando en la memoria.
La forma en que diseñé la API anterior, supongo que la llamaré sobre: servidor 4000. Que de hecho es un servidor Express (obviamente no tiene la API interna de NextJS para purgar el caché).
Así que moví la llamada a las pages/api/revalidate y hasta: 3000 servidor.
Funciona bien:
// ./src/pages/server/revalidate.js const getRevalidate = async () => { await fetch('/api/revalidate'); }; export default getRevalidate;