Vue.js 와 Quasar 프레임워크를 사용하면서 한동안 해결하지 못했던 문제를 정리해본다.

Quasar 프레임워크에는 SSR(Server Side Rendering) 을 제공해준다.

Prefetch 기능인데, 해당 기능으로 SSR 작업을 하면된다.

 

여기서 문제가 있었는데, 바로 meta data 설정이다.

 

export default {
	meta: {
    	title: 'Index Page',
        titleTemplate: title => `${title} - My Website`,
    }
}

물론 위처럼하면 정적 데이터를 가지고 title을 설정해주는것이니 아무런 문제가 없다.

 

하지만

export default {
	meta: {
    	title: this.getData.title,
        titleTemplate: title => `${title} - My Website`,
    },
    preFetch({ store, currentRoute, previousRoute, redirect, ssrContext }) {
    	let params = currentRoute.params.id;
        return store.dispatch("project/fetchData", data);
    }
    computed: {
    	...mapGetters("project", ["getData"]),
    }
}

위 처럼, preFetch 의 데이터를 바로 가져오려고 하면 getData가 없다며 오류를 발생시킨다.

 

그럼 어떻게 해결해야할까?

나는 이와 같은 방법으로 meta 설정을 하였다.

 

export default {
	meta(){
      return {
      	title: this.getDataFunction.title,
        titleTemplate: title => `${title} - My WebSite`
      }
    },
    preFetch({ store, currentRoute, previousRoute, redirect, ssrContext }) {
    	let params = currentRoute.params.id;
        return store.dispatch("project/fetchData", data);
    }
    computed: {
    	...mapGetters("project", ["getData"]),
        getDataFunction(){
        	return this.$store.state.project.data || {}
        }
    }
}

이미 sotre.dispatch() 를 통해 state에 저장해준 값을 가져오는것이기때문에, 위처럼 작업해주면 SSR에서도 meta data를 쉽게 설정해줄 수 있다.