[SSR 비활성화] SPA 방식으로 변경

This commit is contained in:
sohot8653
2025-10-21 15:54:01 +09:00
parent 7bbbdbe977
commit f2a717df4f
8 changed files with 33 additions and 51 deletions

View File

@@ -1,8 +1,4 @@
export default async function useOverlay() {
if (import.meta.server) {
// SSR에서는 cytoscape-overlays를 사용하지 않음
return null
}
// 전체 export 객체를 반환
return await import('cytoscape-overlays')
}
// SPA 모드에서는 항상 클라이언트에서만 실행됨
return await import("cytoscape-overlays");
}

View File

@@ -1,32 +1,30 @@
export default defineNuxtRouteMiddleware(async (to, _from) => {
if (import.meta.client) {
const userStore = useUserStore();
const { hasPagePermission } = usePermission();
const userStore = useUserStore();
const { hasPagePermission } = usePermission();
// 공개 라우트 목록 (로그인 없이 접근 가능)
const publicRoutes = ["/login", "/register", "/auth-error"];
// 공개 라우트 목록 (로그인 없이 접근 가능)
const publicRoutes = ["/login", "/register", "/auth-error"];
// 공개 라우트인지 확인
const isPublicRoute = publicRoutes.some(route => to.path === route);
// 공개 라우트인지 확인
const isPublicRoute = publicRoutes.some(route => to.path === route);
// 공개 라우트가 아닌 경우 로그인 체크
if (!isPublicRoute && !userStore.isLoggedIn) {
return navigateTo("/login");
// 공개 라우트가 아닌 경우 로그인 체크
if (!isPublicRoute && !userStore.isLoggedIn) {
return navigateTo("/login");
}
// 로그인된 사용자의 경우 권한 체크
if (userStore.isLoggedIn) {
// 홈화면 경로는 항상 허용
if (to.path === "/" || to.path === "/1/") {
return;
}
// 로그인된 사용자의 경우 권한 체크
if (userStore.isLoggedIn) {
// 홈화면 경로는 항상 허용
if (to.path === "/" || to.path === "/1/") {
return;
}
// 페이지 권한 체크
if (!hasPagePermission(to.path)) {
console.log(`페이지 권한이 없습니다.: ${to.path}`);
alert(`페이지 권한이 없습니다.`);
return navigateTo("/");
}
// 페이지 권한 체크
if (!hasPagePermission(to.path)) {
console.log(`페이지 권한이 없습니다.: ${to.path}`);
alert(`페이지 권한이 없습니다.`);
return navigateTo("/");
}
}
});

View File

@@ -1,6 +1,6 @@
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
compatibilityDate: "2025-05-15",
ssr: false,
devtools: { enabled: true },
modules: [
"@nuxt/eslint",
@@ -36,7 +36,7 @@ export default defineNuxtConfig({
shim: false,
strict: true,
},
plugins: ["~/plugins/vue3-tui-grid.client.ts"],
plugins: ["~/plugins/vue3-tui-grid.ts"],
components: [
{ path: "~/components/base", pathPrefix: false }, // @base/ 접두사 제거
{ path: "~/components/layout", pathPrefix: false }, // @layout/ 접두사 제거

View File

@@ -19,18 +19,6 @@ export default defineNuxtPlugin(() => {
...(isFormData ? {} : { "Content-Type": "application/json" }),
...(options.headers || {}),
};
// 3) SSR 쿠키 포워딩
if (import.meta.server) {
const cookie = useRequestHeaders(["cookie"])?.cookie;
const reqUrl = String(request);
const isBackendApi =
!reqUrl.startsWith("http") || reqUrl.startsWith(baseURL);
if (cookie && isBackendApi) {
options.headers = { ...(options.headers || {}), cookie } as any;
}
}
},
onResponseError({ response }) {
// 공통 로깅

View File

@@ -1,7 +1,7 @@
import { defineNuxtPlugin } from '#app'
import TuiGrid from 'vue3-tui-grid'
import 'tui-grid/dist/tui-grid.css'
export default defineNuxtPlugin(nuxtApp => {
nuxtApp.vueApp.use(TuiGrid)
})
import { defineNuxtPlugin } from '#app'
import TuiGrid from 'vue3-tui-grid'
import 'tui-grid/dist/tui-grid.css'
export default defineNuxtPlugin(nuxtApp => {
nuxtApp.vueApp.use(TuiGrid)
})