Node.js 서버 구조

리린·2021년 6월 27일
0

node.js

목록 보기
6/16

프로젝트 구조

  1. package.json생성
  • 콘솔: npm init
    결과: package.json 생성
  • 코드
{
  "name": "practice",
  "version": "1.0.0",
  "description": "'익스프레스로 만드는 웹 서비스'",
  "main": "index.js",
  "scripts": {
    "start": "nodemon app"
  },
  "author": "nahyeon",
  "license": "MIT"
}
  1. 데이터베이스 설치
  • 콘솔: npm i sequelize mysql2 sequelize-cli
    결과: 패키지가 설치되고 node_modules폴더와 package-lock.json이 생성됨
  • 콘솔2: npx sequelize init
    결과: config, migrations, models, seeders 폴더가 생성됨
    (npx 명령어를 사용하는 이유: 전역설치 npm i -g를 피하기 위해 )
  • 폴더구조
  1. 필요한 npm 패키지 설치
  • 콘솔: npm i express cookie-parser express-session morgan multer dotenv nunjucks
  • 콘솔2: npm i -D nodemon

코드

app.js

  • 코드 구조:
  1. 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. 패키지에 따른 설정 추가
    1)dotenv
dotenv.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,
});
  1. 라우터 추가
const pageRouter = require('./routes/page');
  1. 미들웨어 추가
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,
       },
}));
  1. 라우터 각 페이지에 추가
app.use('/', pageRouter);
  1. 404응답 미들웨어 추가
app.use(req, res, next)=>{
const error = new Error(`${req.method} ${req.url} 라우터가 없습니다.`);
error.status=404;
next(error);
});
  1. 에러처리 미들웨어 추가
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');
}); 
  1. 포트와 연결 추가
app.listen(app.get('port'), () =>{
	console.log(app.get('port'), '빈 포트에서 대기	중');
});

.env

  • 코드 구조
  1. 변수 저장하기
COOKIE_SECRET=cookiesecret

routes/page.js

  • 코드 구조
  1. express 가져오기
const express = require('express');
  1. express의 Router 메서드 가져오기
const router = express.Router();
  1. 라우터에 미들웨어 추가
router.use((req, req, next)=>{
	res.locals.user=null;
    res.locals.followerCount = 0;
    res.locals.followingCount = 0;
    res.locals.followerIdList=[];
    next();
});
  1. 각 주소마다 라우터 추가
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,
    });
});
  1. 모듈 내보내기
module.exports=router;
profile
개발자지망생

0개의 댓글