엔드포인트
URI와 HTTP 요청 메서드(Get, Post, Put, Delete 등)로 구분된 클라이언트 요청을 말한다.
Express에서의 라우트 구조
const express = require('express'); const app = express(); // 클라이언트에서 HTTP 요청 메서드 중 // Get을 이용해서 'host:port'로 요청을 보내면 // 실행되는 라우트 app.get('/', (req, res) => { res.send('Hello World!'); });
app.METHOD(PATH, HANDLER);
클라이언트에서 서버로 요청을 보낼 때 사용하는 HTTP 요청 메서드를 말한다.
클라이언트에서 get 을 사용해서 HTTP 요청 메서드를 서버로 전송했다면,
Express 라우트 메서드 역시 get으로 작성된 처리 코드가 있어야 해당 함수가 동작 된다.
const express = require('express');
const app = express();
app.listen(5000, () => {
// 5000번 포트로 웹 서버 실행
consol.log("Server started. port 5000");
});
// 클라이언트 HTTP 요청 메서드 Get 방식으로 'host:5000/practice'를 호출했을 경우
app.get("/practice", (req, res) => {
res.send("get 요청에 대한 응답");
});
// 클라이언트 HTTP 요청 메서드 Post 방식으로 'host:5000/practice'를 호출했을 경우
app.post("/practice", (req, res) => {
res.send("post 요청에 대한 응답");
});
// 클라이언트 HTTP 요청 메서드 종류에 상관없는 방식으로 'host:5000/practice'를 호출했을 경우
app.all("/practice", (req, res) => {
res.send("모든 요청에 대한 응답");
});
'/', '/about', '/about/practice'
'/ab?cd' // b?는 문자 b가 0개 혹은 1개가 있다는 표현.
'/ab+cd' // b+는 문자 b가 1개 이상 있다는 표현.
'/ab*cd' // 문자 ab와 cd사이에 문자가 없거나 혹은 어떤 문자도 올수 있다는 표현.
'ab(cd)?e' // (cd)?는 문자 cd가 0번 혹은 1번 있을 수 있다는 표현.
/a/ // 클라이언트에서 요청한 라우트 경로에 a가 포함되어 있는 경우
/^insert/ // 클라이언트에서 요청한 라우트 경로가 문자 insert로 시작하는 경우
라우트 핸들러에서 사용되는 매개변수
- req : Request로 클라이언트의 요청 정보를 담고 있다.
- res : Response로 클라이언트에게 응답하기 위한 정보를 담고 있다.
- next : 다음 미들웨어 함수를 가리키는 Object이다.
// 콜백 함수의 세 번째 매개변수로 next 오브젝트 사용
app.get('/example', (req, res, next) => {
console.log('첫 번째 콜백 함수');
next(); //다음 콜백 함수 호출
},(req, res) => {
res.send('두 번째 콜백 함수'); //클라이언트로 응답
});
const ex0 = (req, res, next) => {
console.log('첫 번째 콜백 함수');
next(); // 다음 콜백 함수 호출
};
const ex1 = (req, res, next) => {
console.log('두 번째 콜백 함수');
next(); // 다음 콜백 함수 호출
};
const ex2 = (req, res, next) => {
res.send('세 번째 콜백 함수'); // 클라이언트로 응답
};
app.get('/practice', [ex0, ex1, ex2]); // 콜백 함수 배열로 정의
응답 메서드 | 설명 |
---|---|
res.download() | 파일을 다운로드 하도록 프롬프트 |
res.end() | 응답 프로세스를 종료한다. |
res.json() | JSON 응답을 전송한다 |
res.jsonp() | JSONP 지원을 통해JSON 응답을 전송한다. |
res.redirect() | 요청의 경로를 재지정해 준다. |
res.render() | 뷰(view)템플릿을 렌더링 해준다. |
res.send() | 다양한 유형의 응답을 전송한다. |
res.sendFile() | 파일을 octet스트림으로 전송한다. |
res.sendStatus() | 응답 상태 코드를 설정한 후 해당 코드를 응답 본문(body)에 담아서 전송한다. (404 Not Found 등) |
// 모듈식 라우터 - 하나의 라우트 경로에 각 라우트 메서드를 처리
app.route('/practice')
.get((req, res) => { // HTTP 메서드 get 요청에 대한 조회 처리
res.send('정보 조회');
})
.post((req, res) => { // HTTP 메서드 get 요청에 대한 저장 처리
res.send('정보 추가');
})
.put((req, res) => { // HTTP 메서드 get 요청에 대한 수정 처리
res.send('정보 수정');
})
.delete((req, res) => { // HTTP 메서드 get 요청에 대한 삭제 처리
res.send('정보 삭제');
})
routes/customer.js
const express = require('express');
const route = express.Route();
router
.get("/", (req, res) => { // HTTP 메서드 get 요청에 대한 조회 처리
res.send('고객 정보 조회');
})
.post("/insert", (req, res) => { // HTTP 메서드 get 요청에 대한 저장 처리
res.send('고객 정보 추가');
})
.put("/update", (req, res) => { // HTTP 메서드 get 요청에 대한 수정 처리
res.send('고객 정보 수정');
})
.delete("/delete", (req, res) => { // HTTP 메서드 get 요청에 대한 삭제 처리
res.send('고객 정보 삭제');
});
route/product.js
const express = require('express');
const route = express.Route();
router
.get("/", (req, res) => { // HTTP 메서드 get 요청에 대한 조회 처리
res.send('상품 정보 조회');
})
.post("/insert", (req, res) => { // HTTP 메서드 get 요청에 대한 저장 처리
res.send('삼품 정보 추가');
})
.put("/update", (req, res) => { // HTTP 메서드 get 요청에 대한 수정 처리
res.send('상품 정보 수정');
})
.delete("/delete", (req, res) => { // HTTP 메서드 get 요청에 대한 삭제 처리
res.send('상품 정보 삭제');
});
app.js
const express = require('express');
const customerRoute = require('./routes/customer'); // customer 라우트를 추가
const proeuctRoute = require('./routes/product'); // product 라우트를 추가
const app = express();
app.use(express.json({
limit: '50mb' // 최대 50 메가
})); // 클라이언트 요청 body를 json으로 파싱 처리
app.listen(5000, () => {
// 5000번 포트로 웹 서버 실행
consol.log('Server starte. port 5000.');
})
app.use('/customer', customerRoute); // customer 라우트를 추가하고 기본 경로로 /customer 사용
app.use('/product', productRoute); // product 라우트를 추가하고 기본 경로로 /product 사용