IT'S DO
article thumbnail
728x90

[app.js] 안에 있는 변수 및 모듈 풀이

https://itsdo.tistory.com/359

 

[node] Intellij Express Server 구축 방법

1. file > setting > plugin에서 node.js 설치 2. Express를 선택 후 엔진 표시 : EJS 스타일 시트 Plain CSS 선택 후 생성 3. added 54 packages, and audited 55 packages in 2s 4 생성 후 에러 뜰 시 아래와 설명 같이 해주기 터

itsdo.tistory.com

위의 경로와 이어짐.

 

# 미들웨어 패키지

# const createError = require('http-erros'); 
node의 내장모듈 : 안에 각종 에러가 상태 코드가 담겨져 있음. 
ex) 
404 Not Found
405 Method not Allowed


# const express = require('express');
node의 내장모듈 : NODE 웹 프레임워크, 미들웨어 패키지. 쿠키, 세션, 사용자 로그인, URL 파라미터 등 많은 라이브러리들이 존재함.

# const path = require('path');
node의 내장모듈 : 운영체제별로 경로 구분자가 달라 생기는 문제를 해결하기 위해 등장함.
한마디로 path 모듈을 이용하면 경로 구분자 문제를 쉽게 해결하여 필요시 확장자 및 파일명을 원하는 것을 가져 올 수있다.
path.join([paths]) -> 여러 인자를 넣으면 하나의 경로로 합쳐 반환함.

ex) 
__dirname = D:\cobim_document\developMonster\node_server\ifcServer
path.join('/root','get','was','bin'); = /root/get/was/bin
path.join(__dirname, 'views')) =  D:\cobim_document\developMonster\node_server\ifcServer\views
path.join(__dirname, 'public')  = D:\cobim_document\developMonster\node_server\ifcServer\public
express.static(path.join(__dirname, 'public'))  = [Function: serveStatic] // 정적 데이터 public 폴더 안에 있는 것들을 사용할 수 있다.

 

# const cookieParser = require('cookie-parser');

node의 내장모듈 : 웹 브라우저 쿠키 데이터를 확인하고 관리하는 패키지. 유효기간이 지난 쿠키는 필터링함.

req.cookies로 현재 가지고 있는 쿠키를 확인 가능.

ex) req.cookies =>  req.cookies  { 'Idea-52a553a1': 'ba4df42f-8fc8-452a-9496-5bd6ec3562ad' }

 

# const logger = require('morgan');

node의 내장모듈 : morgan 미들웨어의 로그 정보를 볼 수 있으며, 요청과 응답에 대한 로그 콘솔 정보를 기록해줌.

다양한 옵션이 있으며, app.use(logger('dev'));를 하면 개발용 디버깅을 위해 축약된 로그를 출력해준다.

배포용에서는 cobined 옵션이 좋다. 이유는 많은 사람이 접속하면 ip 로그를 기록 해주기 때문.

 


 

# const indexRouter = require('./routes/index');

라우터 : 클라이언트의 요청 경로를 보고 이 요청을 처리할 수 있는 곳으로 기능을 전달해주는 역할.

 

-> index.js 

var express = require('express');
var router = express.Router();
module.exports = router;

module.exports에 router 객체를 참조하게 됨.

이거를 app.js에서 사용하려면 

const indexRouter = require('./routes/index');

이것을 app.js에서 routing 모듈로 사용하려면 

app.use('/', indexRouter);

index.js에서 중앙에 보면

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

이 부분이 있는데, 이것은  서버가 클라이언트에게 index.ejs를 렌더링 하여 보내겠다는 뜻. 즉 

index.ejs안에 보면 

<h1><%= title %></h1>
<p>Welcome to <%= title %></p>

이와 같은 부분들이 있는데, 여기에 Express를 각각에 대입 시켜주게끔 처리 해줌.

ex) Welcom to Express

 

다르게 표현도 가능하다. 

router.post('/v1/board', function(req, res) {

      res.render('index', { title: 'Board'});

});

localhost:3000/v1/board가 들어오면

ex) Welcom to Board

 

 

※ req 객체는 클라이언트의 request에 대한 정보가 담겨 있다. 

    res 객체는 서버가 클라이언트에게 response할 정보가 담겨져 있음.

 

순서 : ejs 파일 렌더링 -> html -> 클라이언트에게 response 응답. 

 

 


# app.set('view','');

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.set('views', path.join(__dirname, 'views')); 

log를 찍어보면

무슨 뜻이냐면, view 페이지의 기본 경로로 해당 폴더 위치의 views를 사용하겠다는 뜻이다.

거기서 view의 엔진으로 ejs 파일을 사용하겠다는 뜻.

 

node에서 view라고 생각하면됨

ex) html 같은 것들.


# app.use(express.json());

app.use(express.json());

요청을 보내거나 받았을때 json 데이터로 받게끔 처리해줌. json 타입으로 보내거나 안받으면 빈 공백으로 나옴. 

 


# app.use(express.urlencoded({ extended: false }));

app.use(express.urlencoded({ extended: false }));

해당 옵션은 bodyParser 미들웨어 여러옵션 중에 하나로, false 일 시에 node.js에 내장된 queryString, true 값 일 시 따로 설치가 필요한 npm qs 라이브러리를 사용함.

둘다 url로 쿼리 스트링을 파싱해주는 거지만, qs가 추가적인 보안이 가능함. qs가 확장된 형태.

하지만 모듈을 설치 안했으면 false를 두고 사용해야하며, 보안 기능이 필요하다면 모듈을 설치 후에 true로 사용하면 된다.

 


# next의 동작 순서

 

# app.use(function(req, res, next) { next(createError(404)); });

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

404 에러를 만들어 내는 미들웨어. 라우터에서 일치하는 주소가 없다면, 이 요청으로 오게됨. 

위의 htpp-errors(createError) 에러가 담긴 패키지에서 404에러를 만들어 내고, 이 에러를 next 에러 핸들러로 보냄.

 

# app.use(function(err, req, res, next) { 

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

에러 핸들러

err에 위의 createError(404)가 담긴다. 

 

res.locals.error = req.app.get('env') === 'development' ? err : {};

이 부분은 logger의 값에 따라 바뀜.

ex)

app.use(logger('dev'));

logger('dev')면은  

로그 쪽에 GET /test 404 14.015 ms -1243이라는 부분이 나타남.

 

app.use(logger('cobined'));

logger('cobined')이면

해당 로그 404라는게 나오지 않는다.

 

module.exports = app;

module의 export에 위에서 각 각 담은 app 객체를 참조하게 함.

 

이렇게 구성되어 있다.

 

profile

IT'S DO

@멋진놈

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!