You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

94 lines
3.0 KiB

12 months ago
  1. const App = {
  2. express: null,
  3. isDev: false,
  4. config: {}
  5. }
  6. // 주요 의존성패키지
  7. const express = require('express')
  8. const bodyParser = require('body-parser')
  9. const cors = require('cors')
  10. const fs = require('fs')
  11. const cookieParser = require('cookie-parser')
  12. process.env.TZ = 'Asia/Seoul';
  13. App.express = express()
  14. // 방금 작성한 global.js 파일을 로드합니다.
  15. require('./global')
  16. // CookieParser, bodyParser 를 로드합니다.
  17. // 여기서 appConfig 변수는 global.js 파일에서 각 환경에 맞는 config파일을 로드하여 할당된 변수입니다.
  18. App.express.use(cookieParser(appConfig.secretKey))
  19. App.express.use(bodyParser.json())
  20. App.express.use(bodyParser.urlencoded({extended: true}))
  21. App.express.use(cors(appConfig.cors)) // CORS 설정
  22. /**
  23. * Helper에 등록된 helper들 자동으로 불러오기
  24. */
  25. // helpers 폴더의 파일 목록을 가져옵니다.
  26. let fileList = fs.readdirSync(root + '/helpers');
  27. // 파일들을 전부 로드합니다.
  28. fileList.forEach(async (fileName) => {
  29. require(root + '/helpers/' + fileName);
  30. });
  31. /**
  32. * 전역 Middleware
  33. * ------------------------------------------------------------------------------------
  34. * 사용자 로그인 여부 체크
  35. */
  36. const userController = loadModule('users','controller');
  37. App.express.use(userController.loginUserCheck);
  38. /**
  39. * 모듈에 등록된 Router 자동으로 불러오기
  40. */
  41. // 라우터 라이브러리를 로드하고 router 객체에 할당 해줍니다.
  42. const router = require('express').Router();
  43. // modules 폴더에 등록된 디렉토리 목록을 불러옵니다.
  44. let dirList = fs.readdirSync(modulePath)
  45. dirList.forEach((dir) => {
  46. // 디렉토리가 맞을경우
  47. if(fs.lstatSync(modulePath + '/' + dir).isDirectory()) {
  48. // 라우팅 설정파일이 존재할 경우
  49. const routePath = `${modulePath}/${dir}/${dir}.routes.js`;
  50. const matchPath = `/${dir}`
  51. // 파일이 존재한다면 router.use로 해당 라우트를 등록해준다.
  52. if(fs.existsSync( routePath )) {
  53. router.use(matchPath, require(routePath))
  54. }
  55. }
  56. });
  57. // App.express 객체에 위에 불러온 router 설정을 사용 설정해줍니다.
  58. App.express.use(router);
  59. /**
  60. * 업로드 관련 Router 추가
  61. */
  62. const attachLibrary = require(root + '/libraries/attach.library')
  63. const path = require("path");
  64. App.express.use(attachLibrary);
  65. // REST API URL 중 /attaches 로 접근하는 리소스는 모두 그대로 리소스를 반환해줍니다.
  66. // 정적인 파일 (이미지, 첨부파일등)
  67. App.express.use('/attaches', express.static(path.join(root, 'data', 'uploads')));
  68. /**
  69. * 어플리케이션 실행
  70. * ------------------------------------------------------------------------------------
  71. * @param port 실행 포트
  72. */
  73. App.start = () => {
  74. // Listen 시작
  75. App.express.listen(appConfig.appPort, '0.0.0.0', () => {
  76. console.log(`[${isDev ? '개발 모드':'릴리즈 모드'}] 서버가 작동되었습니다 : port ${appConfig.appPort}`);
  77. })
  78. }
  79. module.exports = App