const express = require('express');
const cors = require('cors');
const session = require('express-session');
const cookieParser = require('cookie-parser')
const passport = require('passport');
const dotenv = require('dotenv');
const morgan = require('morgan');
const path = require('path');
const hpp = require('hpp');
const helmet = require('helmet');
const userRouter = require('./routes/user');
const usersRouter = require('./routes/users');
const jobRouter = require('./routes/job');
const careerRouter = require('./routes/career');
const educationRouter = require('./routes/education');
const activityRouter = require('./routes/activity');
const awardRouter = require('./routes/award');
const certificationRouter = require('./routes/certification');
const certificationsRouter = require('./routes/certifications');
const languageRouter = require('./routes/language');
const projectRouter = require('./routes/project');
const socialRouter = require('./routes/social');
const comtestRouter = require('./routes/comtest');
const comtestsRouter = require('./routes/comtests');
const teamreviewRouter = require('./routes/teamreview');
const teamreviewsRouter = require('./routes/teamreviews');
const teamsearchRouter = require('./routes/teamsearch');
const skillRouter = require('./routes/skill');
const skillsRouter = require('./routes/skills');
const userskillRouter = require('./routes/userskill');
const jobsRouter = require('./routes/jobs');
const db = require('./models');
const passportConfig = require('./passport');
dotenv.config();
const app = express();
// db.sequelize.sync({ force: true })
db.sequelize.sync()
.then(() => {
console.log('db 연결 성공');
})
.catch(console.error);
passportConfig();
//배포를 위한 setting
if (process.env.NODE_ENV === "production") {
app.use(morgan('combined'))
app.use(hpp());
app.use(helmet());
app.use(cors({
origin: 'https://choono.co.kr',
credentials: true, // 다른 주소간 cookie 전달
}));
} else {
// front --> backend 요청시 터미널에 송신상태 표현됨
app.use(morgan('dev'));
app.use(cors({
origin: true,
credentials: true, // 다른 주소간 cookie 전달
}));
}
// 업로드한 이미지 보이기 위한 작업 - 경로 맞추기 / static: 정적파일 제공 / join: 현 폴더명+uploads라는 이름을 합쳐
// '/': localhost:3065"/images"" --> Postform의 경로 참조
app.use('/', express.static(path.join(__dirname, 'uploads')));
// 자리위치 고정, front(saga)에서 받은 data를 req.body로 넘겨줌 / axios형태
// 즉, front(saga)에서 받은 data를 해석하여 req.body.email 등으로 변경하도록 도움
app.use(express.json());
// 일반 form형태 data 처리
app.use(express.urlencoded({ extended: true }));
// 로그인시 front와 back이 같은 data를 갖고있어야 함
// 로그인시 db의 user정보를 다시 브라우저에 보내줄 때 비번: 보안위험요소 존재(암호화해서 cookie형태로 보냄)
app.use(cookieParser(process.env.COOKIE_SECRET));
app.use(session({
saveUninitialized: false,
resave: false,
// proxy: true, // 배포시
secret: process.env.COOKIE_SECRET, // 암호화
cookie: {
httpOnly: true,
// secure: false,
secure: true, // 배포시
domain: process.env.NODE_ENV === 'production' && '.choono.co.kr'
}
})); // passport 로그인시 활용
app.use(passport.initialize());
app.use(passport.session());
app.get('/', (req, res) => {
res.send('hello express');
})
app.use('/user', userRouter);
app.use('/users', usersRouter);
app.use('/job', jobRouter);
app.use('/career', careerRouter);
app.use('/activity', activityRouter);
app.use('/award', awardRouter);
app.use('/certification', certificationRouter);
app.use('/certifications', certificationsRouter);
app.use('/language', languageRouter);
app.use('/project', projectRouter);
app.use('/social', socialRouter);
app.use('/education', educationRouter);
app.use('/comtest', comtestRouter);
app.use('/comtests', comtestsRouter);
app.use('/teamreview', teamreviewRouter);
app.use('/teamreviews', teamreviewsRouter);
app.use('/teamsearch', teamsearchRouter);
app.use('/skill', skillRouter);
app.use('/skills', skillsRouter);
app.use('/userskill', userskillRouter);
app.use('/jobs', jobsRouter);
app.listen(3065, () => { console.log("서버 실행중!") });
답변 3