개요
기존 http모듈로 서버를 구축 해서 간단한 요청과 응답 프로세스를 경험해보았는데 여타 언어들도 그렇듯이 프레임워크를 사용하면 더욱 효율적으로 작업을 할 수 있다. node.js 생태계에서는 압도적으로 express.js
를 많이 사용한다.
설치하기
npm 환경에서 install 명령어를 통해 express를 설치한다.
npm install express
기본 구조
기본적인 서버를 구축한 소스이다.
http 모듈로 구축했을 때 URL도 파싱해야하고, if문으로 분기처리하기 수고스러웠는데 상당히 깔끔해졌다.
각 라우터마다 요청, 응답 객체를 받아와 여러 형태로 받거나 전달할 수 있다.
//app.js
const express = require('express');
const app = express();
//get 메서드
app.get('/', (req, res) => {
//200 응답을 지정하고, 메시지를 전송한다.
res.status(200).send('hello express server!!');
});
//post 메서드
app.post('/write', (req, res) => {
/* code */
});
//서버 실행
app.listen(8082, () => {
console.log('start express server');
});
모니터링 플러그인
nodemon
은 개발 생산성을 높여주는 모니터링 플러그인이다.
보통 파일이 변경되면 서버를 종료하고 다시 실행시키는데 자동으로 프로젝트내의 파일들의 변경 사항을 감지해서 자동적으로 재시작해준다.
cli 환경에서 실행되기 때문에 global 환경으로 설치해준다.
#설치
npm install -g nodemon
#nodemon으로 앱 실행
nodemon app
package.json
에 start 스크립트로 셋팅해두면 npm start
로 간편히 실행시킬 수 있다.
(정식으로는 npm run start이지만, run 생략가능)
"script" : {
"start" : "nodemon app"
}
nodemon
으로 앱을 실행하면 파일이 바뀌면 알아서 재시작해준다.
> npm-test@1.0.0 start
> nodemon app
[nodemon] 2.0.13
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node app.js`
start express server
sendFile
express에서는 fs
모듈 필요 없이 sendFile
메서드로 html파일을 브라우저에 전달할 수 있다.
project
├── app.js
├── html
│ └── about.html
├── package-lock.json
└── package.json
const path = require('path');
app.get('/about', (req, res) => {
res.sendFile(path.join(__dirname, '/html/about.html'));
});
라우터 사용시 주의사항
express에서 api를 요청받을 때 요청 경로를 지정한다는 의미로 라우팅
이라는 용어가 등장하는데, 이를 제어하는 부분이 라우터이다.
한 라우터에서 여러개의 응답을 보내게 된다면 에러가 발생하는 것을 꼭 알아두자. (반드시 단일 요청에는 단일 응답을 설계하자.)
//❌ bad
app.get(('/', (req, res) => {
res.sendFile('./index.html');
res.send('response test');
res.json({key : 'value'});
});
//✅ Good
app.get(('/', (req, res) => {
res.send('response test');
});
참고자료
- Node.js 교과서 - 익스프레스 프로젝트 시작하기 (조현영 저)