Frameworks/Express.js

3. Express 시작하기 - 라우터 / 라우팅

양디 2016. 1. 9. 11:19


Express 시작하기


Express 서버를 실행해 봅시다.

저번 포스트에 package.json에 대해 배울때에, start라는 scripts에 ./bin/www 를 실행하는 코드가 있었습니다.

따라서 npm 명령어로 실행해봅시다.


npm start




그러면 위와 같이 node ./bin/www 명령어가 실행되는 것을 알 수 있습니다.

PORT는 3000으로 설정되어 있습니다. 주소에 접속해봅시다.


인터넷 주소는 http://localhost:3000 혹은 http://아이피:3000 으로 접속하시면 됩니다.



Express 기본 페이지가 뜨는 것을 볼 수 있습니다.



위 사진은 서버를 실행했던 CMD 창인데, morgan 모듈을 통해서 로그가 되고 있는 것을 볼 수 있습니다.


GET method로 접근한 클라이언트에게 200 status를 보내주고 있는데, 200은 성공적으로 전송했다는 코드입니다.

아래 보면 404 코드는 not found 코드인데, 지금 favicon.ico 가 없기 때문에 뜨는 에러입니다.

./router



오늘 포스팅할 주 내용인 routes 폴더입니다.


index.js 파일과 users.js 파일로 이루어져 있습니다.


둘 중에 index.js 파일만 가지고 설명하겠습니다.


index.js

1
2
3
4
5
6
7
8
9
var express = require('express');
var router = express.Router();
 
/* GET home page. */
router.get('/'function(req, res, next) {
  res.render('index', { title: 'Express' });
});
 
module.exports = router;
cs


routes 폴더에 있는 js 파일들은 따로 설정된 모듈이 아니라, express 모듈 중에서 Router 기능을 하는 파일들을 모아둔 것입니다.

파일을 하나로 해도 무관하지만, 페이지가 많아지고 / 로 구분되는 칸이 많아질수록 라우터 파일을 분산시키는 것이 효율적입니다.


1번 줄은 모듈 객체를 선언하고, 2번 줄에서 그 객체를 이용하여 Router() 메소드를 호출함으로써 router 객체를 생성합니다.


5번은, get 메소드(주소창에 써지는 것)로 '/'을 받았을 때 실행된다는 것입니다.

뒤의 콜백 함수는 request, response, next 함수입니다. 


request는 요청한 정보, 즉 클라이언트에게 받은 정보가 들어가고

response는 반응해줄 정보, 즉 클라이언트에게 보내줄 정보가 들어갑니다.


따라서 '/'를 입력받으면 클라이언트에게 6번의 내용을 render해서 보내준다는 뜻입니다.


render 메소드가 어떤건지는 아래 설명하겠습니다.


어쨌든 render 하겠다고 설정해두고, 9번에서 이 router 객체를 모듈화하여서 내보냅니다.


이 모듈화된 객체는 ./app.js 파일에서 사용합니다.


./app.js


위에서 모듈화 된 router 객체는 app.js 파일에서 사용합니다.




8번, 9번 줄을 보면 아까 모듈화했던 router를 불러서 routes와 users 객체에 넣는것을 볼 수 있습니다.


그리고 31번 32번에 라우터를 설정하는 것입니다.


위의 app은 express 객체이고, use를 통해서 라우터를 설정합니다.


31번 줄의 코드 같은 경우는, 주소에서 localhost:3000/<router> 를 담당시키도록 한다는 뜻입니다.

잘 이해가 안된다면, 32번 줄의 코드는 localhost:3000/users/<router> 를 담당시키도록 한다는 뜻입니다.


예를 들어 users.js 파일에


1
2
3
router.get('/test'function(req, res, next) {
  res.send('respond with a resource');
});
cs


라는 소스코드를 추가한다면,


localhost:3000/users/test   라는 홈페이지에 접속하면 respond with a resource를 보낸다는 뜻입니다.


익스프레스에서 한 주소에 두개의 라우터가 들어가는것은 불가능합니다.


app.use('/', routes);

app.use('/', users); 이렇게 되면 먼저 나온 routes만 적용됩니다.


따라서 하나의 주소에 여러개의 라우터를 설정하고 싶다면,


한 라우터의 파일에 다른 라우터를 import 시켜서 사용하는 방법이 있겠습니다.


Response Methods


Response에 사용되는 Method들은 다음과 같습니다.

  • res.download()  : download를 실행시킵니다.
  • res.end() :       response 작업을 마칩니다.
  • res.json()        : Json을 보냅니다.
  • res.jsonp()       : Json을 보내는데, jsonp support가 되는 json을 보냅니다.
  • res.redirect()    : 페이지를 다른곳으로 이동시킵니다.
  • res.render()      : 렌더링 엔진에 따라서 views를 해석하여 보냅니다.
  • res.send()       : 다양한 타입의 내용을 보냅니다. boolean, string 등등..
  • res.sendFile()   : 파일을 보냅니다.
  • res.sendStatus()  : http status code를 보냅니다. 기본적으로 200은 ok, 404는 not found, 304는 not modified , 500은 internal error입니다.



Point !

Router 등록 방법 : routes 폴더에 있는 파일을 이용한다.

Response 메소드 알아두는것 중요.









댓글