이전 포스트에서도 Express를 사용해본적이 있지만...
정리 할겸 다시 한번
01. Express란?
완전 생짜에서 시작할려면 뭐 이것저것, url path mapping, 세션관리 등 할꺼 많고 복잡하게 구현해야할 것을 Express는 간편히 구축 할수 있도록 도와준다.
특징은 아래와 같다.
- 견고한 라우터
- 고성능
- 높은 테스트 커버리지
- redirect, caching
- 다수의 템플릿 엔진 지원
- 컨텐츠 네고시에이션(?)
- 신속한 앱 개발
02. express 설치
1 | PS C:\mynode\test\express_test> npm install express --save | cs |
- nba : nba 선수 정보를 가져올 수 있는 모듈(MIT)
- body-parser : request로 부터 body의 파라미터를 추출
03. app.js 작성
./app.js
1 2 3 4 5 6 7 8 9 10 | const express = require('express'); const bodyParser = require('body-parser') const app = express(); const api = require('./routes/index'); app.use(bodyParser.json()); app.use('/api', api); const port = process.env.PORT || 3000; app.listen(port, () => console.log(`Listening on port ${port}...`)); | cs |
#01 : express 모듈을 불러옴
#02 : body-parser 도 불러옴
#03 : app을 express로 선언
#04 : routes에 API 기능들을 정의 하려고함.
#06 : bodyParser.json()을 미들웨어로 사용
#07 : prefix /api 는 #04에서 정의한 api모듈을 사용.
#09 : port 정의
#10 : 리스너 등록.
04. api router 작성
./routes/nba.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | const express = require('express'); const nba = require('nba'); // nba 모듈 const router = express.Router(); router.post('/player', (req, res) => { // req에서 name을 읽어 선수를 찾아 정보를 json 형태로 반환하는 api const player = nba.findPlayer(req.body.name); if(player == null) { console.log("No matching player!") return res.status(204).json({'data' : null}) } // player id 로 추가 정보 조회 nba.stats.playerInfo({ PlayerID : player.playerId }) .then((data) => { return res.json(data); }) .catch(function (err) { console.log(err); return res.status(500).json({'error' : 1, 'message' : 'Error, playerInfo'}) }); }) | cs |
간단하게 nba 모듈로부터 받는 json형태의 응답을 고대로~ 다시 응답해주는 api다.
- req.body.name : body-parser를 사용하기 때문에 요론식으로 불러 올 수 있다.
- res.json(data) : 컨텐츠형식을 json으로 해서 응답.
찾으려는 선수가 없으면 httpcode 204(No Contents)
stats정보 조회 하다가 error 발생하면 500(Internal Server Error) 정도의 error 처리 해주고.
nba api 사용법은 아래 링크에 더 자세히 ...
https://www.npmjs.com/package/nba
다음은 index.js 를 아래와 같이 작성해보자.
./routes/index.js
1 2 3 4 5 6 7 8 | const express = require('express'); const nba = require('./nba'); const router = express.Router(); router.use('/nba', nba); module.exports = router | cs |
이렇게 index.js를 만드는 건... 일종의 디자인 패턴인 듯하다. @..@
index.js에 router.use()를 묶어 개발 함으로서 깔끔하게 routes모듈을 구조화 할 수 있을 것이다.
05. 실행 결과
실행해보자. root 경로에서 node app.js 하면 실행 된다.
1 2 | PS C:\mynode\nba\nba_express> node app.js Listening on port 3000... | cs |
그리고 Postman이라는 툴을 이용해서 api 요청을 해보자. postman이 궁금하다면 https://basketdeveloper.tistory.com/19?category=786833
URL 입력 후, body 클릭, raw 선택, json으로 contetType 설정 후 아래 json 형태로 입력
1 2 3 | { "name":"curry" } | cs |
그리고 파란색 Send 버튼을 클릭해보면, 아래영역에 응답이 샥. 표시되는걸 확인 할 수 있다.
'개발 이야기 > NodeJS' 카테고리의 다른 글
NodeJS 인기있는 Logging 모듈 Winston (0) | 2019.02.20 |
---|---|
NodeJS validate로 요청 데이터 검사 (0) | 2019.02.11 |
우분투에 Nodejs설치 하기 (0) | 2018.07.28 |
NodeJS MongoDB 연동하기 (0) | 2018.06.30 |
NodeJS 시작하기 (0) | 2018.06.23 |