Node.js : npm1 - Express

김가영·2020년 10월 8일
0

Node.js

목록 보기
10/34
post-thumbnail

참고자료 : 'Node.js 교과서(조현영)'

npm

Node Package Manager의 약자
npm 에 업로드된 노드 모듈을 패키지라고 부른다.

package.json 으로 패키지 관리하기

설치한 패키지의 버전을 관리한다.
노드 프로젝트를 시작하기 전에는 폴더 내부에 무조건 package.json 부터 만들어야 함.

  • console 에서 npm init

익스프레스

http 와 Connect 컴포넌트를 기반으로 하는 웹 프레임워크

  • HTTP 요청 본문 파싱
  • 쿠키 파싱
  • 세션 관리
  • URL 과 HTTP 요청 메서드 기반, if 조건으로 routing 구성
  • 응답 헤더 결정

npm install express

const express = require("express")
const app = express()
const port = 5000

app.get('/',(req,res) => {
	res.send("Hello World");
});

app.listen(port, () => console.log(`Example app listening on port ${port}`))

미들웨어

  • 요청과 응답의 중간에 위치한다.

  • 위에서 아래로 순서대로 실행된다

  • 기능을 추가하거나, 나쁜 요청을 걸러내거나

  • app.use(미들웨어) : 모든 요청에서 미들웨어 실행

  • app.use('/abc',미들웨어) : abc로 시작하는 요청에서 미들웨어 실행

  • app.post('/abc',미들웨어) : abc 로 시작하는 POST 요청에서 미들웨어 실행

  • (req,res,next) => {} 꼴. next() 를 함수 내에서 실행하여야 다음 미들웨어로 넘어가게 된다.

에러 처리 미들웨어

  • (err, req,res,next) => {}
  • 특별한 경우가 아니라면 가장 아래에 위치하도록

자주 사용하는 미들웨어

body-parser

: 요청 본문의 데이터를 해석하여 req.body 객체로 만들어준다. 멀티파트(동영상, 동영상, 파일) 데이터는 처리하지 못한다.

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

raw 나 text 형식의 데이터를 다루는 게 아니라면 따로 설치할 필요 없음

: request에 동봉된 쿠키를 해석하여 req.cookies 객체로 만든다.

app.use(cookieParser(비밀키));
  • 쿠키 생성 /제거
// 쿠키 생성하기
res.cookie("key","value",{options});
// 쿠키 제거하기
res.clearCookie('key','value',{options});

multer

: 이미지, 동영상 등의 파일을 멀티파트 형식으로 업로드할 때

  • 멀티파트 : multipart/form-data 폼을 통해 업로드하는 데이터의 형식
  • 설치하기 : npm i multer in console

Router 객체로 라우팅 분리하기

app.get 같은 메서드가 라우터 부분.

  • routes/index.js
const express = require('express');
const router = express.Router();

router.get('/', (req,res) => {
    res.send('Hello World')
});

module.exports = router;
  • routes/user.js
const express = require('express');
const router = express.Router();

router.get('/', (req, res) => {
    res.send('Hello, User');
});

module.exports = router;
  • app.js

index.js는 생략 가능

const express = require('express');
const app = express();
const path = require('path');

const indexRouter = require('./routes');
const userRouter = require('./routes/user');

const port = 5000;


app.use((req,res,next) => {
    console.log("hello")
    next();
});

app.use('/', indexRouter);
app.use('/user', userRouter);

app.use((req,res,next) => {
    res.status(404).send('Not Found');
});

app.listen(port, () => console.log(`listening on port ${port}`))

route 매개변수

router.get('/users/:id', (req, res) => {
    console.log(req.params.id, req.query)
    return res.end('success')
}) ;

/users/1 or /users/2 등의 요청을 처리할 수 있게 된다.
id 값은 req.params.id로 이용 가능하다.

  • 일반 라우터 뒤에 위치해야 한다.
  • 쿼리스트링의 키-값 정보는 req.query 객체 안에 들어있다.

주소는 같지만 메서드가 다른 코드

router.route('/users')
	.get((req,res) => {
		res.send('get');
	})
	.post((req,res) => {
  		res.send('post');
	})
profile
개발블로그

0개의 댓글