/** * @author : 최정우 * @since : 2022.09.20 * @dscription : Express 라이브러리 활용 HTTP Web Server 모듈입니다. */ const { BASE_DIR, PORT } = require('../../../Global'); const JsxToJsBuild = require('./build/JsxToJsBuild');//JSX파일을 JS파일로 Build 해주는 모듈 const Logger = require('../log/Logger');//Logger(필수) const express = require('express'); const webServer = express(); /** * @author : 최정우 * @since : 2022.09.20 * @dscription : HTTP Server start */ webServer.listen(PORT, function () { Logger.logging(`★★★ Node.js를 활용한 Web Server 구동(Port:${PORT}) ★★★`); }) /** * @author : 최정우 * @since : 2022.09.20 * @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(); }); /** * @author : 최정우 * @since : 2022.09.20 * @dscription : ROOT URL -> index.html */ webServer.get('/', function (request, response) { response.sendFile(`${BASE_DIR}/client/views/index.html`); }) /** * @author : 최정우 * @since : 2022.09.20 * @dscription : Router's (Controller) */ webServer.use("/test", require('../../service/test/router/TestRouter')); /** * webpack 환경에서는 필요 없음 * @author : 최정우 * @since : 2022.09.20 * @dscription : Babel을 활용하여 jsx구문을 js구문으로 바꿔 주는 기능 //webServer.get('*.(jsx|js)', function(request, response, next) { webServer.get('*.jsx', function(request, response, next) { //JSX파일을 JS파일로 Build하는 function 호출 (return Promise) const JsxFileBuildResult = JsxToJsBuild.buildCache(`${BASE_DIR + request.url}`); JsxFileBuildResult.then(function (jsContent, jsxConent) { //jsContent는 Text(String)이기 때문에, 그대로 보내면 MIME type이 text/plan으로 전송됨 //그래서 MIME type을 text/javascript로 바꿔야함 //동일한 코드1 : response.contentType('text/javascript'); //동일한 코드2 : response.setHeader('Content-Type', 'text/javascript'); response.type('.js');//동일한 코드3 //응답 response.send(jsContent); }).catch(function (error) { next(error);//Global Error Handler에게 예외상황 맡기기 }) }) */ /** * @author : 최정우 * @since : 2022.09.20 * @dscription : 화면요청 URL 처리 */ webServer.get('*.page', function (request, response, next) { //기능구현예정 }) /** * @author : 최정우 * @since : 2022.09.20 * @dscription : ROOT URL, Router's, 화면요청 URL 등.. 이 외 나머지 정적 자원에 대한 처리 기능 */ webServer.get('*.*', function (request, response, next) { response.sendFile(`${BASE_DIR}${request.params['0']}.${request.params['1']}`); }) /** * @author : 류윤주 * @since : 2022.11.06 * @dscription : React Router처리 */ webServer.get('*', function (request, response, next) { response.sendFile(`${BASE_DIR}/client/views/index.html`); }) /** * @author : 최정우 * @since : 2022.09.21 * @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(); })