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
- 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입니다.
Router 등록 방법 : routes 폴더에 있는 파일을 이용한다.
Response 메소드 알아두는것 중요.