Open
Description
What problem is this solving
Implement something like NuxtServerInit Action, so we can load data from the server-side and give it directly to the client-side on the initial load/render.
Proposed solution
Include an index.js
file inside /stores
with a nuxtServerInit
action which will be called from the server-side on the initial load.
Describe alternatives you've considered
The only way I found to do this is using Pinia with Vuex, using the nuxtServerInit
from Vuex:
// store/index.js
import { useSessionStore } from '~/stores/session'
export const actions = {
async nuxtServerInit ({ dispatch }, { req, redirect, $pinia }) {
if (!req.url.includes('/auth/')) {
const store = useSessionStore($pinia)
try {
await store.me() // load user information from the server-side before rendering on client-side
} catch (e) {
redirect('/auth/login') // redirects to login if user is not logged in
}
}
}
}
Activity