본문 바로가기
개발 이야기/NodeJS

NodeJS Express 간단한 서버 만들기

by 농개 2019. 2. 11.
반응형

이전 포스트에서도 Express를 사용해본적이 있지만... 

정리 할겸 다시 한번





01. Express란?

Node로 http 서버를 개발 할려고 하면 Express 모듈을 사용하면 간편히 할 수 있다.

완전 생짜에서 시작할려면 뭐 이것저것, url path mapping, 세션관리 등 할꺼 많고 복잡하게 구현해야할 것을 Express는 간편히 구축 할수 있도록 도와준다.


특징은 아래와 같다.

  • 견고한 라우터
  • 고성능
  • 높은 테스트 커버리지
  • redirect, caching 
  • 다수의 템플릿 엔진 지원
  • 컨텐츠 네고시에이션(?)
  • 신속한 앱 개발

간단하게 npm으로 설치 후, nba 선수 프로필을 제공 하는 기능을 만들어 보자.(nba라는 npm 패키지 사용)




02. express 설치

아래 명령어로 express 설치 가능하다. (제너레이터 사용 안함)

1
PS C:\mynode\test\express_test> npm install express --save 
cs


그리고 nba, body-parser를 설치하자.
  • nba : nba 선수 정보를 가져올 수 있는 모듈(MIT)
  • body-parser : request로 부터 body의 파라미터를 추출



03. app.js 작성

root 디렉터리(express_test/)에 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라는 폴더를 만들고
그 안에 index.js와 nba.js를 만들었다.


./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