본문 바로가기
node.js

Node.js - Express

by BIGENGINEER 2024. 1. 7.

 

 

1. Express

- nodemon 설치

- http 와 달리 서버 실행할 때 createServer 함수 사용 없이 Express 실행만 하면 서버 실행 가능

 

2. 라우트 파라미터

- 어떤 자료에서 특정 부분만 가져오고 싶을 때 사용

- url/:id 처럼 라우팅 코드에서 요청 url 뒤에 : 을 붙인 후 그 뒤에 변수 작성

 

app.get("/contacts/:id", (req,res)=>{
    res.send(`view contacts for ID: ${req.params.id}`)
});

 

req.params.id -> 요청을 보낼 때 id 값을 같이 보내는데, 요청에서 파라미터가 모두 담긴 객체 중에 id 값이 담긴 변수 

 

- post : 추가

- put : 수정

- delete : 삭제

 

 

3. 미들웨어

- 요청과 응답 중간에서 요청 처리하거나 원하는 형태로 응답 수정하는 기능을 가진 함수

 

 

3.1) 라우터 미들웨어

 

- router 객체 만들기

const router = express.Router();

 

- app.js 에서 router 객체를 미들웨어로 등록  => app.use 함수 사용app.use(router);

 

- router 객체를 사용해 라우트 코드 작성

 

const express = require("express");
const router = express.Router();

router.route("/contacts")
    .get((req,res)=>{
        res.send("contacts page");
    })
    .post((req,res)=>{
        res.send("create contacts");
    });

//특정 부분만 사용하고 싶을때 : 라우트 파라미터 - GET, PUT, DELETE
router.route("/contacts/:id")
    .get((req,res)=>{
        res.send(`view contacts for ID: ${req.params.id}`)
    })
    .put((req,res)=>{
        res.send(`update for ID: ${req.params.id}`)
    })
    .delete((req,res)=>{
        res.send(`delete for ID: ${req.params.id}`)
    });


//모듈로 동작시키기 위함
module.exports = router;

 

 

<->

 

 

app.js- 여기서 app.use로 불러오는 파일만 수정하면 라우터 코드 건드리지 않고 다른 파일 불러올 수 있음.

- app.use("/users", require("./routes/contactRoutes"));  => /users 이 부분 수정하면 얼마든지 재사용 가능

 

const express= require("express");
const app = express();

//라우터 객체 생성
const router = express.Router();

//요청 방식을 함수 이름으로 사용가능
app.get("/",(req,res)=>{
    res.send("Hello-node");
});

//별도로 저장한 파일을 불러와야함
app.use("/users", require("./routes/contactRoutes"));

app.listen(3000,()=>{
    console.log("서버 실행중");
})

 

 

contactsRouters.js

const express = require("express");
const router = express.Router();

router
    .route("/")
    .get((req,res)=>{
        res.send("contacts page");
    })
    .post((req,res)=>{
        res.send("create contacts");
    });

//특정 부분만 사용하고 싶을때 : 라우트 파라미터 - GET, PUT, DELETE
router
    .route("/:id")
    .get((req,res)=>{
        res.send(`view contacts for ID: ${req.params.id}`)
    })
    .put((req,res)=>{
        res.send(`update for ID: ${req.params.id}`)
    })
    .delete((req,res)=>{
        res.send(`delete for ID: ${req.params.id}`)
    });


//모듈로 동작시키기 위함
module.exports = router;

 

 

 

 

3.2) 바디파서 미들웨어- 서버로 요청 보낼 때 요청 본문에 담긴 것을 파싱하는 미들웨어 파싱 : 전송 자료를 프로그램에서 사용할 수 있는 형식으로 변환하는 것 

 

* 함수- .json()- .urlencoded() : 브라우저에 백엔드라고 검색했을 때, https://www.google.com/search?q=백엔드

이때 넘겨지는 자료를 어떻게 파싱할 지 지정하는 것

 

-> app.use(express.urlencoded({ extended:true }));  : query string이 중복된 객체인 것도 처리 가능

-> .urlencoded(extended:false)

 

 

router
    .route("/")
    .get((req,res)=>{
        res.send("contacts page");
    })
    .post((req,res)=>{
        console.log(req.body); //이 부분 추가
        res.send("create contacts");
    });

 

 

실행하면

 

- undefined라고 뜸

-> req.body에 요청을 파싱해 주지 않았기 때문

-> 요청을 파싱해주어야 JSON 값을 가져다 사용 가능

=> 미들웨어 등록해주어야함

 

app.js

//바디파서를 사용해달라고 미들웨어 등록
app.use(express.json());
app.use(express.urlencoded({ extended : true }));

 

즉, 요청 본문에 있는 내용을 프로그래밍에 사용할 수 있도록 파싱하려면 바디파서라는 미들웨어를 등록해주어야함

-> 요청 본문을 가지고 와서 필요한 변수로 할당한 다음 사용 가능

'node.js' 카테고리의 다른 글

Node.js - 모듈 ~ 라우팅  (0) 2024.01.07
8장 몽고디비  (0) 2023.11.26
4장 ~ 5장  (0) 2023.11.06