jichoi / calendar star
박정하 박정하 06-30
250630 박정하 API get 통신 시 server proxy 설정으로 인해 params 누락 되는 오류 수정
@4da0534e6ff1055a17d9ad2962d82bd6b39c81d1
 
client/views/robots.txt (added)
+++ client/views/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Disallow:/(파일 끝에 줄바꿈 문자 없음)
server/modules/web/Server.js
--- server/modules/web/Server.js
+++ server/modules/web/Server.js
@@ -18,8 +18,8 @@
 const newLineStream = require("new-line");
 
 webServer.use((req, res, next) => {
-    res.header("X-Frame-Options", "SAMEORIGIN"); // or 'SAMEORIGIN' or 'ALLOW-FROM uri'
-    next();
+  res.header("X-Frame-Options", "SAMEORIGIN"); // or 'SAMEORIGIN' or 'ALLOW-FROM uri'
+  next();
 });
 
 /**
@@ -28,7 +28,7 @@
  * @dscription : HTTP Server start
  */
 webServer.listen(PORT, function () {
-    Logger.logging(`★★★ Node.js를 활용한 Web Server 구동(Port:${PORT}) ★★★`);
+  Logger.logging(`★★★ Node.js를 활용한 Web Server 구동(Port:${PORT}) ★★★`);
 });
 
 /**
@@ -37,11 +37,21 @@
  * @dscription : Intercepter 역할을 하는 미들웨어 기능
  */
 webServer.use(function (request, response, next) {
-    let ip = request.headers["x-forwarded-for"] || request.socket.remoteAddress;
-    Logger.logging(
-        `[HTTP] ${request.url} (Method: ${request.method}, IP: ${ip})`
-    );
-    next();
+  let ip = request.headers["x-forwarded-for"] || request.socket.remoteAddress;
+  Logger.logging(
+    `[HTTP] ${request.url} (Method: ${request.method}, IP: ${ip})`
+  );
+  next();
+});
+
+/**
+ * @author : 김성원
+ * @since : 2024.05.30
+ * @dscription : robots.txt
+ */
+webServer.get("/robots.txt", function (request, response) {
+  //response.sendFile을 통한 HTTP html reponse (html내용 Streaming)
+  response.sendFile(`${BASE_DIR}/client/views/robots.txt`);
 });
 
 /**
@@ -50,8 +60,8 @@
  * @dscription : ROOT URL -> index.html
  */
 webServer.get("/", function (request, response) {
-    //response.sendFile을 통한 HTTP html reponse (html내용 Streaming)
-    response.sendFile(`${BASE_DIR}/client/views/index.html`);
+  //response.sendFile을 통한 HTTP html reponse (html내용 Streaming)
+  response.sendFile(`${BASE_DIR}/client/views/index.html`);
 });
 
 /**
@@ -60,40 +70,45 @@
  * @dscription : 화면요청 URL 처리
  */
 webServer.get("*.page", function (request, response, next) {
-    //index.html 내용을 직접 Streaming하여 Response, Streaming 중간에 내용 수정
-    //수정 내용 : URL 요청이 아닌, 브라우저에 표시된 URL만 변경하여, 해당하는 URL PATH의 Vue Component를 routing하기 위함
-    const StreamTransform = new Transform();
-    StreamTransform._transform = function (data, encoding, done) {
-        let fileContent = data.toString();
-        let replaceBeforeContent = `<script id="app-start-vue-page">const APP_USER_HTTP_REQUEST_URL = '/';</script>`;
-        let replaceAfterContent = `<script id="app-start-vue-page">const APP_USER_HTTP_REQUEST_URL = '${request.params["0"]}.page';</script>`;
-        fileContent.replace(replaceBeforeContent, replaceAfterContent);
-        this.push(fileContent);
-        done();
-    };
-    //Streaming 진행
-    FS.createReadStream(`${BASE_DIR}/client/views/index.html`)
-        .pipe(newLineStream())
-        .pipe(StreamTransform)
-        .pipe(response);
+  //index.html 내용을 직접 Streaming하여 Response, Streaming 중간에 내용 수정
+  //수정 내용 : URL 요청이 아닌, 브라우저에 표시된 URL만 변경하여, 해당하는 URL PATH의 Vue Component를 routing하기 위함
+  const StreamTransform = new Transform();
+  StreamTransform._transform = function (data, encoding, done) {
+    let fileContent = data.toString();
+    let replaceBeforeContent = `<script id="app-start-vue-page">const APP_USER_HTTP_REQUEST_URL = '/';</script>`;
+    let replaceAfterContent = `<script id="app-start-vue-page">const APP_USER_HTTP_REQUEST_URL = '${request.params["0"]}.page';</script>`;
+    fileContent.replace(replaceBeforeContent, replaceAfterContent);
+    this.push(fileContent);
+    done();
+  };
+  //Streaming 진행
+  FS.createReadStream(`${BASE_DIR}/client/views/index.html`)
+    .pipe(newLineStream())
+    .pipe(StreamTransform)
+    .pipe(response);
 });
 
 /**
- * @author : 하석형
- * @since : 2023.08.24
+ * @author : 박정하
+ * @since : 2025.03.24
  * @dscription : REST API 서버에 데이터 요청 보내기(Proxy)
  */
 webServer.use(
-    "*.json",
-    expressProxy(API_SERVER_HOST, {
-        proxyReqPathResolver: function (request) {
-            return `${request.params["0"]}.json`;
-        },
-        proxyReqOptDecorator: function (proxyReqOpts, srcReq) {
-        proxyReqOpts.headers['X-Forwarded-For'] = srcReq.headers['x-forwarded-for'] || srcReq.connection.remoteAddress;
-        return proxyReqOpts;
+  "*.json",
+  expressProxy(API_SERVER_HOST, {
+    proxyReqPathResolver: function (request) {
+      // 쿼리스트링 여부에 따라 다르게 전송
+      if (request.url.split('?')[1]) {
+        return request.originalUrl;
+      } else {
+        return `${request.params["0"]}.json`;
+      }
+    },
+    proxyReqOptDecorator: function (proxyReqOpts, srcReq) {
+      proxyReqOpts.headers['X-Forwarded-For'] = srcReq.headers['x-forwarded-for'] || srcReq.connection.remoteAddress;
+      return proxyReqOpts;
     }
-    })
+  })
 );
 
 /**
@@ -102,14 +117,13 @@
  * @dscription : REST API 서버에 데이터 요청 보내기(Proxy)
  */
 webServer.use(
-    "*.file",
-    expressProxy(API_SERVER_HOST, {
-        parseReqBody: false,
-        proxyReqPathResolver: function (request) {
-            console.log("request : ", request.url, request.params[0]);
-            return `${request.params["0"]}.file`;
-        },
-    })
+  "*.file",
+  expressProxy(API_SERVER_HOST, {
+    parseReqBody: false,
+    proxyReqPathResolver: function (request) {
+      return `${request.params["0"]}.file`;
+    },
+  })
 );
 
 /**
@@ -118,7 +132,7 @@
  * @dscription : ROOT URL, Router's, 화면요청 URL 등.. 이 외 나머지 정적 자원에 대한 처리 기능
  */
 webServer.get("*.*", function (request, response, next) {
-    response.sendFile(`${BASE_DIR}${request.params["0"]}.${request.params["1"]}`);
+  response.sendFile(`${BASE_DIR}${request.params["0"]}.${request.params["1"]}`);
 });
 
 /**
@@ -127,11 +141,8 @@
  * @dscription : Global Error Handler (*맨 마지막에 적용해야됨)
  */
 webServer.use(function (error, request, response, next) {
-    const errorCode = !error.statusCode ? 500 : error.statusCode;
-    response
-        .status(errorCode)
-        .send("에러가 발생하였습니다. 관리자에게 문의바랍니다.");
-    let message = `[Error:${errorCode}] ${request.url}/n ${error.stack}/n`;
-    Logger.logging(message);
-    //next();
-});
+  const errorCode = !error.statusCode ? 500 : error.statusCode;
+  response.redirect('/'); // 메인 페이지로 유도
+  let message = `[Error: ${errorCode}]${request.url} / n ${error.stack} / n`;
+  Logger.logging(message);
+});
(파일 끝에 줄바꿈 문자 없음)
Add a comment
List