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 메소드 참고 사이트
[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 }
});
'블록체인 기술사업 교육 > Node.js' 카테고리의 다른 글
| 블록체인 기술사업 교육 29일차 (0) | 2023.05.15 |
|---|---|
| 블록체인 기술사업 교육 27&28일차 (0) | 2023.05.11 |
| 블록체인 기술사업 교육 16일차 (0) | 2023.04.24 |
| 블록체인 기술사업 교육 15일차 (0) | 2023.04.21 |
| 블록체인 기술사업 교육 14일차 (0) | 2023.04.20 |
댓글