- 콘솔: npm init
결과: package.json 생성- 코드
{ "name": "practice", "version": "1.0.0", "description": "'익스프레스로 만드는 웹 서비스'", "main": "index.js", "scripts": { "start": "nodemon app" }, "author": "nahyeon", "license": "MIT" }
- 콘솔: npm i sequelize mysql2 sequelize-cli
결과: 패키지가 설치되고 node_modules폴더와 package-lock.json이 생성됨- 콘솔2: npx sequelize init
결과: config, migrations, models, seeders 폴더가 생성됨
(npx 명령어를 사용하는 이유: 전역설치 npm i -g를 피하기 위해 )- 폴더구조
- 콘솔: npm i express cookie-parser express-session morgan multer dotenv nunjucks
- 콘솔2: npm i -D nodemon
- 코드 구조:
- express와 미들웨어(cookie-parser, morgan, express-session 등), path, dotenv 패키지(.env파일을 process.env파일로 만듬) 등 불러들이기
const express =require('express'); const cookieParser = require('cookie-parser'); const morgan = require('morgan'); const path = require('path'); const session = require('express-session'); const nunjucks = require('nunjucks'); const dotenv = require('dotenv');
- 패키지에 따른 설정 추가
1)dotenvdotenv.config()
2)express
const app = express();
3)port 추가
app.set('port', process.env.PORT||8001);
4)view 설정
app.set('view engine', 'html'); nunjucks.configure('views', { express:app, watch: true, });
- 라우터 추가
const pageRouter = require('./routes/page');
- 미들웨어 추가
app.use(morgan('dev'); app.use(express.static(path.join(__dirname, 'public'))); app.use(express.json); app.use(express.urlencoded({extended: false}); app.use(cookieParser(process.env.COOKIE_SECRET)); app.use(session({ resave: false, saveUninitialized: false, secret: process.env.COOKIE_SECRET, cookie: { httpOnly: true, secure: false, }, }));
- 라우터 각 페이지에 추가
app.use('/', pageRouter);
- 404응답 미들웨어 추가
app.use(req, res, next)=>{ const error = new Error(`${req.method} ${req.url} 라우터가 없습니다.`); error.status=404; next(error); });
- 에러처리 미들웨어 추가
app.use((err, req, res, next)=>{ res.locals.message=err.message; res.locals.error=process.env.NODE_ENV !=='production' ? err : {}; res.status(err.status || 500); res.render('error'); });
- 포트와 연결 추가
app.listen(app.get('port'), () =>{ console.log(app.get('port'), '빈 포트에서 대기 중'); });
- 코드 구조
- 변수 저장하기
COOKIE_SECRET=cookiesecret
- 코드 구조
- express 가져오기
const express = require('express');
- express의 Router 메서드 가져오기
const router = express.Router();
- 라우터에 미들웨어 추가
router.use((req, req, next)=>{ res.locals.user=null; res.locals.followerCount = 0; res.locals.followingCount = 0; res.locals.followerIdList=[]; next(); });
- 각 주소마다 라우터 추가
router.get('/profile', (req, res)=>{ res.render('profile', {title:'내 정보-NodeBird'}); }); router.get('/join', (req, res)=>{ res.render('join', {title:'회원가입-NodeBird'}); }); router.get('/', (req, res)=>{ const twits=[]; res.render('main', { title: 'NodeBird', twits, }); });
- 모듈 내보내기
module.exports=router;