하석형 하석형 05-22
250522 하석형 라우터 없는 페이지 notFound로 유도 처리 방식 변경, 콘텐츠유형관리 /cmmn/notFound.page 등록 불가 처리
@4f50e98993b6fd2fd5dc7e42253b06232d6ebff0
client/views/pages/AppRouter.js
--- client/views/pages/AppRouter.js
+++ client/views/pages/AppRouter.js
@@ -7,10 +7,13 @@
 // 관리자
 import CommonSelectList from "./adm/boardManagement/template/commonTemplate/CommonSelectList.vue";
 import CommonSelectListOne from "./adm/boardManagement/template/commonTemplate/CommonSelectListOne.vue";
+// NotFound
+import NotFound from "./user/etc/NotFound.vue";
 
 const beforeRoutes = [
   /* 메인화면 */
   { path: "/", name: "main", korName: "홈", component: Main },
+  { path: '/:pathMatch(.*)*', name: "PageNotFound", component: NotFound },
 
   // 관리자
   {
@@ -166,9 +169,14 @@
 
   AppRouter.beforeEach(async (to, from, next) => {
     const contextPath = store.state.contextPath; // Context Path 정보
-    const routeExists = AppRouter.getRoutes().some(route => route.path === to.path || (route.name && route.name === to.name));
-    if (!routeExists) {
-      next({ name: 'notfound' });
+    // const routeExists = AppRouter.getRoutes().some(route => route.path === to.path || (route.name && route.name === to.name));
+    // if (!routeExists) {
+    //   next({ name: 'notfound' });
+    //   return;
+    // }
+    // vue3 권장방식 ('/:pathMatch(.*)*'로 라우터 유무 확인)
+    if(to.name === 'PageNotFound') {
+      next();
       return;
     }
 
client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementInsert.vue
--- client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementInsert.vue
+++ client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementInsert.vue
@@ -222,9 +222,15 @@
       this.contsTypeVO.pageCrs = pageCrs;
 
       const pageCrsRegex = /^\/(?:[a-zA-Z0-9_\-]+\/)*[a-zA-Z0-9_\-]+\.[a-zA-Z0-9]+$/;
+      const notFound = '/cmmn/notfound.page';
       if (!this.isEmpty(mngrPageCrs)) {
         if (!pageCrsRegex.test(this.contsTypeVO.mngrPageCrs)) {
           alert("관리자 PATH는 /로 시작하고, 마지막에 확장자가 포함되어야 합니다.");
+          this.$refs.mngrPageCrs.focus();
+          return false;
+        }
+        if(this.contsTypeVO.mngrPageCrs.toLowerCase() == notFound) {
+          alert("사용할 수 없는 경로입니다.");
           this.$refs.mngrPageCrs.focus();
           return false;
         }
@@ -235,6 +241,11 @@
           this.$refs.pageCrs.focus();
           return false;
         }
+        if(this.contsTypeVO.pageCrs.toLowerCase() == notFound) {
+          alert("사용할 수 없는 경로입니다.");
+          this.$refs.pageCrs.focus();
+          return false;
+        }
       }
 
       // COMPONENT_URL
server/modules/web/server.js
--- server/modules/web/server.js
+++ server/modules/web/server.js
@@ -147,6 +147,15 @@
 
 /**
  * @author : 하석형
+ * @since : 2025.05.22
+ * @dscription : 404 Not Found 처리
+ */
+webServer.use(function(req, res, next) {
+  res.status(404).redirect('/cmmn/notFound.page');
+});
+
+/**
+ * @author : 하석형
  * @since : 2023.08.24
  * @dscription : Global Error Handler (*맨 마지막에 적용해야됨)
  */
Add a comment
List