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.
 
 
 

95 lines
3.0 KiB

const App = {
express: null,
isDev: false,
config: {}
}
// 주요 의존성패키지
const express = require('express')
const bodyParser = require('body-parser')
const cors = require('cors')
const fs = require('fs')
const cookieParser = require('cookie-parser')
process.env.TZ = 'Asia/Seoul';
App.express = express()
// 방금 작성한 global.js 파일을 로드합니다.
require('./global')
// CookieParser, bodyParser 를 로드합니다.
// 여기서 appConfig 변수는 global.js 파일에서 각 환경에 맞는 config파일을 로드하여 할당된 변수입니다.
App.express.use(cookieParser(appConfig.secretKey))
App.express.use(bodyParser.json())
App.express.use(bodyParser.urlencoded({extended: true}))
App.express.use(cors(appConfig.cors)) // CORS 설정
/**
* Helper에 등록된 helper들 자동으로 불러오기
*/
// helpers 폴더의 파일 목록을 가져옵니다.
let fileList = fs.readdirSync(root + '/helpers');
// 파일들을 전부 로드합니다.
fileList.forEach(async (fileName) => {
require(root + '/helpers/' + fileName);
});
/**
* 전역 Middleware
* ------------------------------------------------------------------------------------
* 사용자 로그인 여부 체크
*/
const userController = loadModule('users','controller');
App.express.use(userController.loginUserCheck);
/**
* 모듈에 등록된 Router 들 자동으로 불러오기
*/
// 라우터 라이브러리를 로드하고 router 객체에 할당 해줍니다.
const router = require('express').Router();
// modules 폴더에 등록된 디렉토리 목록을 불러옵니다.
let dirList = fs.readdirSync(modulePath)
dirList.forEach((dir) => {
// 디렉토리가 맞을경우
if(fs.lstatSync(modulePath + '/' + dir).isDirectory()) {
// 라우팅 설정파일이 존재할 경우
const routePath = `${modulePath}/${dir}/${dir}.routes.js`;
const matchPath = `/${dir}`
// 파일이 존재한다면 router.use로 해당 라우트를 등록해준다.
if(fs.existsSync( routePath )) {
router.use(matchPath, require(routePath))
}
}
});
// App.express 객체에 위에 불러온 router 설정을 사용 설정해줍니다.
App.express.use(router);
/**
* 업로드 관련 Router 추가
*/
const attachLibrary = require(root + '/libraries/attach.library')
const path = require("path");
App.express.use(attachLibrary);
// REST API URL 중 /attaches 로 접근하는 리소스는 모두 그대로 리소스를 반환해줍니다.
// 정적인 파일 (이미지, 첨부파일등)
App.express.use('/attaches', express.static(path.join(root, 'data', 'uploads')));
/**
* 어플리케이션 실행
* ------------------------------------------------------------------------------------
* @param port 실행 포트
*/
App.start = () => {
// Listen 시작
App.express.listen(appConfig.appPort, '0.0.0.0', () => {
console.log(`[${isDev ? '개발 모드':'릴리즈 모드'}] 서버가 작동되었습니다 : port ${appConfig.appPort}`);
})
}
module.exports = App