feat: prerender public site pages
This commit is contained in:
59
frontend/src/entry-public-ssr.js
Normal file
59
frontend/src/entry-public-ssr.js
Normal file
@@ -0,0 +1,59 @@
|
||||
import { createSSRApp, h } from 'vue';
|
||||
import { createMemoryHistory, createRouter, RouterView } from 'vue-router';
|
||||
import { createHead, renderHeadToString } from '@vueuse/head';
|
||||
import { renderToString } from '@vue/server-renderer';
|
||||
import { createI18n } from 'vue-i18n';
|
||||
import en from '@/locales/en.json';
|
||||
import fr from '@/locales/fr.json';
|
||||
import Landing from '@/features/landing/views/Landing.vue';
|
||||
import ProductPage from '@/features/landing/views/ProductPage.vue';
|
||||
import PricingPage from '@/features/landing/views/PricingPage.vue';
|
||||
import BlogsPage from '@/features/landing/views/BlogsPage.vue';
|
||||
import GuidesPage from '@/features/landing/views/GuidesPage.vue';
|
||||
import './assets/main.css';
|
||||
|
||||
const publicRoutes = [
|
||||
{ path: '/', component: Landing },
|
||||
{ path: '/product', component: ProductPage },
|
||||
{ path: '/pricing', component: PricingPage },
|
||||
{ path: '/blogs', component: BlogsPage },
|
||||
{ path: '/guides', component: GuidesPage },
|
||||
{ path: '/login', component: { render: () => null } },
|
||||
{ path: '/register', component: { render: () => null } },
|
||||
];
|
||||
|
||||
export async function render(routePath) {
|
||||
const router = createRouter({
|
||||
history: createMemoryHistory(),
|
||||
routes: publicRoutes,
|
||||
});
|
||||
|
||||
const head = createHead();
|
||||
const i18n = createI18n({
|
||||
legacy: false,
|
||||
fallbackLocale: 'en',
|
||||
messages: {
|
||||
en,
|
||||
fr,
|
||||
},
|
||||
});
|
||||
|
||||
const app = createSSRApp({
|
||||
render: () => h(RouterView),
|
||||
});
|
||||
|
||||
app.use(router);
|
||||
app.use(head);
|
||||
app.use(i18n);
|
||||
|
||||
await router.push(routePath);
|
||||
await router.isReady();
|
||||
|
||||
const appHtml = await renderToString(app);
|
||||
const headTags = await renderHeadToString(head);
|
||||
|
||||
return {
|
||||
appHtml,
|
||||
headTags,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user