nuxt / nuxt

The Intuitive Vue Framework.

Home Page:https://nuxt.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

A page re-rendering and page deletion composable

CHIBX opened this issue · comments

Describe the feature

This request is for the implementation of a renderPage() method capable of calling the internal prerender process of Nuxt to render, not just normal pages, but those with dynamic slugs.
I believe this feature would prove significant for blogs, and various static sites to control the re-rendering of specific pages upon update to their respective data.

export default defineEventHandler(async (event)=>{
  await renderPage('/posts/24', { query1:  'mostLiked' });
});

The previous way of adding prerenderable slugs below results in the the need to rebuild to get fresh new routes/slugs:

import { ofetch } from 'ofetch';

const getPlanetsRoutes = async () => {
    const response = await ofetch("https://api.nuxtjs.dev/planets");
    return response.map((planet) => `/planets/${planet.slug}`);
}

export default defineNuxtConfig({
    hooks: {
        async 'nitro:config'(nitroConfig) {
            const planetsRoutes = await getPlanetsRoutes();
            nitroConfig.prerender.routes.push(...planetsRoutes);
        }
    }
});

This feature request prevents the need for unnecessary rebuild and allows re-rendering to occur server-side. This will improve flexibility and ease as anyone could cache a page based on data/[slug title] gotten from a database.
Developers will be able to delete pages that are no longer needed (maybe after deletion of data from a store) using removePage(route).

The feature would be added only for users with the prerender feature enabled on at least one route, so as to avoid rendering conflicts with a full SSR app rendering mechanism

Additional information

  • Would you be willing to help implement this feature?
  • Could this feature be implemented as a module?

Final checks