본문 바로가기
블록체인 기술사업 교육/Node.js

블록체인 기술사업 교육 25&26일차

by Mecodata 2023. 5. 9.

Express

- Node.js의 대표적인 웹 프레임워크 

- http 모듈을 이용하여 웹 서버를 구축하고 데이터를 표시하는 방식을 좀 더 추상화하여 웹 개발을 더 수월하게 할 수 있도록 다양한 API를 제공함

기본 세팅

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

// ejs나 html 같은 view 파일 경로 및 엔진 설정 시
app.set("views", __dirname + "/views"); // views 위치 설정
app.set("view engine", "ejs"); // view engine 타입 설정
app.use(express.urlencoded({ extended: false })); // post 방식 허용

// 서버 포트 번호 및 실행 시 시작할 명령 지정 
app.listen(3000, () => { console.log("Server Start"); });

 

미들웨어

- 미들웨어 = 요청(req)와 응답(res)의 중간 위치에서 거쳐가는 함수

- [(req, res, next) => {}] 형태로 구성되면 next는 생략 가능 (미들웨어가 여러 개면 사용)

- 에러 처리 미들웨어의 경우에는 [(err, req, res, next) => {}] 형태

- Express에서의 미들웨어 = app 객체에서 use, HTTP 메소드(get, post, put, delete 등)를 사용할 때 파라미터로 입력하는 함수 (일종의 콜백 함수)

- 미들웨어는 여러 개로 입력이 가능함 

- res.render() = 지정한 파일로 화면 전환(렌더링)

- res.send() = 지정한 데이터를 서버에서 출력

req, res 메소드 참고 사이트

https://inpa.tistory.com/entry/EXPRESS-%F0%9F%93%9A-%EC%9A%94%EC%B2%AD-%EA%B0%9D%EC%B2%B4%EC%99%80-%EC%9D%91%EB%8B%B5-%EA%B0%9D%EC%B2%B4-req-res

 

[EXPRESS] 📚 요청 객체와 응답 객체 (req, res) 정리

응답 객체 - response res.app: 똑같이 res 객체를 통해 app 객체에 접근한다. res.app.get('')같이 사용 가능. res.set(헤더, 값) / res.setHeader(헤더, 값): 응답의 헤더를 설정한다. req.get()이 헤더값을 가져오는거

inpa.tistory.com

app 기본 메소드

- use(미들웨어) = 모든 요청에서 미들웨어 실행

- use(경로, 미들웨어) = 해당 경로에서 시작하는 요청에서 미들웨어 실행

- listen(포트번호, () => {}) = 몇번 포트에서 서버를 실행할지 + 서버 시작 시 실행할 명령 설정 

- get(경로, 미들웨어) = GET 요청이 올 때의 동작을 설정

- post(경로, 미들웨어) = POST 요청이 올 때의 동작을 설정

post 방식으로 데이터 요청처리

- app.use(express.urlencoded({ extended: false })); => x-www-form-urlencoded 형태의 데이터 해석 (html form 태그로 데이터를 전송 받을 경우) 

※ extended: true => qs 모듈 사용, extended: false => query-string 모듈 사용 

- app.use(express.json()); => JSON 형태의 데이터 해석 (데이터를 JSON으로 전송할 경우)

미들웨어 동작 순서

app.get('/', (req, res, next) => {
    if (false) {
    	next(); // 다음 미들웨어로 넘어감
    } else {
    	next('route'); // 다음 미들웨어가 아닌 다음 라우터로 넘어감
    }
    
}, (req, res) => { 
	// next()면 실행,
	// next('route')면 실행 X
});


app.get('/', (req, res, next) => { 
	// ... next('route')인 경우 실행
})

- next() = 다음 미들웨어로 넘어감

- next("route") = 다음 미들웨어가 아닌 다음 라우터로 넘어감

- 미들웨어 간에 req.data를 통해 데이터를 전달할 수 있음

req.params / req.query / req.body

- req.params = 라우터의 매개변수 (경로에서 :으로 지정한 파라미터)

- req.query = 쿼리 스트링의 문자열 매개변수(URL에서 ? 이후쿼리 스트링으로 입력된 파라미터)

- req.body = 클라이언트에서 post 방식으로 JSON에 담겨있는 파라미터

※ 보통 get 방식일 때는 req.query, post 방식일 때는 req.body를 참조하여 데이터를 불러옴

// 요청 url => localhost:3000/34/Tom?food=pizza
// :id, :name으로 지정하였기 때문에 req.params로 호출이 가능한 것
router.get('/:id/:name', (req, res, next) => {
	console.log(req.params) // { id: "34", name:"Tom" }
        console.log(req.query) // { food : "pizza"}
});

// 클라이언트 post 요청
await axios.post('localhost:3000/34/Tom', { 
    name: 'lee', // post 로 보낼 데이터
    age: 21
});

// 서버의 데이터 조회
router.post('/:id/:name', (req, res, next) => {
	console.log(req.params) // { id: "34", name:"Tom" }
        console.log(req.body) // { name : "lee", age : 21 }
});

 

댓글