프로젝트 초기화
$ npm init -y
Express 설치
$ npm install express
웹서버 구현
const express = require('express')
const app = express()
const port = 3080
app.get('/', (req,res) => {
res.send("안녕하세요?")
})
app.get('/data', (req,res) => {
res.send("데이터 입니다")
})
app.listen(port, () => {
console.log("서버가 실행됩니다.")
})
웹서버 구동
$ node index.js
라우팅
app.METHOD(PATH, HANDLER)
- app : Express의 인스턴스
- METHOD : HTTP 요청 메서드(GET, POST, PUT, DELETE 등)
- PATH : 서버에서의 경로
- HANDLER : 라우트(Route)가 일치할 때 실행되는 함수
- 파라미터 req, res, next
콜백함수 사용 예
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('/example', [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()
get, post, put과 같은 라우트 메서드를 한곳에 작성할 수 있다.
app.route('/customer')
.get((req, res) => {
res.send('고객 정보 조회');
})
.post((req, res) => {
res.send('신규 고객 추가');
})
.put((req, res) => {
res.send('고객 정보 수정');
})
.delete((req, res) => {
res.send('고객 정보 삭제');
});
express.Router
라우트 처리를 여러 개의 파일로 분리해 구현이 가능하다.
routes/customer.js
const express = require("express");
const router = express.Router();
router
.get("/", (req, res) => {
res.send("고객 정보 조회");
})
.post("/insert", (req, res) => {
res.send("신규 고객 추가");
})
.put("/update", (req, res) => {
res.send("고객 정보 수정");
})
.delete("/delete", (req, res) => {
res.send("고객 정보 삭제");
});
routes/product.js
const express = require("express");
const router = express.Router();
router
.get("/", (req, res) => {
res.send("상품 정보 조회");
})
.post("/insert", (req, res) => {
res.send("신규 상품 추가");
})
.put("/update", (req, res) => {
res.send("상품 정보 수정");
})
.delete("/delete", (req, res) => {
res.send("상품 정보 삭제");
});
app.js
const express = require('express');
const customerRoute = require('./routes/customer');
const productRoute = require('./routes/product');
const app = express();
app.use(express.json({
limit: '50mb' // 최대 50메가
}));
app.listen(3000, () => {
console.log('Server started. port 3000.');
})
app.use('/customer', customerRoute);
app.use('/product', productRoute);
에러처리
app.get('/example', (req, res) => {
throw new Error('에러 발생');
});
app.get('/example', (req, res, next) => {
next(new Error('에러 발생'));
});
app.get('/example', (req, res, next) => {
next(new Error('에러 발생'));
});
app.use((err, req, res, next) => {
console.error(err);
res.status(500).json({ statusCode: res.statusCode, errMessage: err.message });
});
정적파일 제공
app.use(express.static('public'));
app.use('/static', express.static('public'));
app.use('/static', express.static(__dirname + '/public'));
'Note' 카테고리의 다른 글
html에서 react 사용하기 (0) | 2023.08.05 |
---|---|
express + fetch + chart.js (0) | 2023.08.01 |
Bootstrap Collapse with Indicator (0) | 2023.07.23 |
Bootstrap Circle Badge (0) | 2023.07.23 |
Bootstrap Badge Color Extension (1) | 2023.07.23 |