https://expressjs.com/ko/starter/installing.html
→ 공식문서를 참고하여 작성한 글입니다.
node.js
환경에서 서버를 구축하기 쉽게 만들어주는 프레임워크이다.미들웨어
의 추가가 편리하고, 자체적으로 라우터
기능을 제공한다.npm install express --save
를 이용하여 설치한다.--save
플래그는 해당 프레임워크를 package.json
의 dependencies
에 추가하며, 이후 npm i
를 이용하여 설치 할 수 있게 해준다.HTTP 메소드
와 path
를 비교하여 해당 요청에 맞는 응답을 하는 기능.http
객체를 사용하는 경우 if
문을 이용하여 분기 시켜주어야 하지만, Express.js
는 자체적으로 라우팅 기능을 내장한다.http 객체
의 경우 요청 객체
에서 method
와 url
을 가져와 비교문을 작성한다.// http 객체를 사용하는 경우
const http = require('http');
const server = http.createServer((req, res) => {
const {method, url} = req;
if(method === 'GET' && url === '/user'){
req.end('USERINFO');
}
});
// Express.js 를 사용하는 경우
const express = require('express');
const app = express();
app.get('/user', (req, res) => {
req.send('USERINFO');
});
// 위와 동일한 작동을 한다.
.write()
, .end()
가 아닌 .send()
혹은 .json()
을 사용한다..send()
는 Content-Type
을 자동으로 지정해 준다는 특징이 있다..end()
는 잘 안쓴다..send()
와 .json()
을 자주 사용하며, .end()
의 경우 응답코드 404
등을 전달할 때 아무런 내용을 넣지 않고자 할 때 사용되지만, .send()
도 동일한 역할을 하기 때문에 잘 사용되지 않는다.Express.js
에서는 요청과 응답의 중간에 위치하는 일종의 라이브러리(함수)를 의미한다.npm
을 이용하여 설치하고 변수에 할당하거나, 원하는 미들웨어를 직접 작성하여 사용 할 수 있다.require
문법으로 문서로 불러와 사용한다.const express = require('express');
const app = express();
const cors = require('cors')
// cors 미들웨어를 변수에 지정한다.
next()
로 다음 미들웨어가 실행되거나, 응답을 전달 할 수 있도록 해주어야한다.req.send(’err’)
등으로 다음 미들웨어로 넘어가지 않고 중간 단계에서 에러에 대한 응답을 처리해야한다.const express = require('express');
const app = express();
const testMdware = app.get(req, res, next) {
if(err){
res.send('Error!') // 에러가 있는 경우 에러 케이스로 종료한다.
}
next() // 에러가 없는 경우 다음 미들웨어를 부르거나, 응답을 전달한다.
}
const express = require('express');
const app = express();
const testMdware = app.get(req, res, next) {
if(err){
res.send('Error!')
}
next()
}
app.get('/', testMdware, (req, res) => {
req.send('hi')
})
app.use(사용할 미들웨어)
를 사용하면, 모든 요청에 대해서 미들웨어를 실행한다.const express = require('express');
const app = express();
const cors = require('cors')
app.use(cors) // 모든 요청에 대해 해당 미들웨어를 적용한다.
app.get('/', (req, res) => {
req.send('hi')
})
payload
를 불러오기 위해선 .on
과 이벤트
를 이용하여 버퍼
로 받아 문자열로 바꾸는 방법을 사용했다.// http 객체 이용
let body = [];
request.on('data', (chunk) => {
body.push(chunk);
}).on('end', () => {
body = Buffer.concat(body).toString(); // 문자열로 바꾸기
});
Express.js
는 자체적으로 요청의 payload
를 JSON
의 형식으로 가져오는 Body-parser
미들웨어를 내장한다.require
문법을 사용하지는 않으며, express.json(실행옵션)
을 변수에 지정하고, 전역으로 사용(app.use()
)하거나, 원하는 요청에만 사용 할 수 있다.payload
는 JSON
의 형태로 전달되며, 객체 혹은 배열의 형태로만 전달 될 수 있다.(일단은)express.json({strict : false})
로 해당 미들웨어를 불러오게 되면, 미들웨어의 실행옵션 중 strict
옵션을 false
로 바꾼다는 뜻이 되며, 이 경우 배열과 객체가 아닌 일반 문자열도 전달할 수 있다.payload
를 .body
를 이용하여 불러 올 수 있다.const express = require('express');
const app = express();
const bodyParser = express.json({strict : false})
// Body-parser 미들웨어를 불러온다.
// strict 설정을 false로 변경한다.
app.use(bodyParser)
app.post('/newpost', (req, res) => {
res.json(req.body.toUpperCase())
// payload를 대문자로 변경하는 간단한 예제
// req.body 로 payload 를 불러온다.
})
req.query
로 가져 올 수 있으며, URI
에 포함된 query
의 정보를 가지는 파라미터이다.http://somesite.com/home?a=hello&b=mynameis&c=kr
// 일때,
req.query.a // 'hello'
req.query.b // 'mynameis'
req.query.c // 'kr'
// query의 값은 위와 같다.
req.params
로 가져 올 수 있으며, URI
에 포함된 매개변수 값(params)
을 가지는 파라미터이다.// http://somesite.com/userinfo/:username
// :username 이라는 매개변수를 받는다고 가정한다.
http://somesite.com/userinfo/krock
// 일때,
req.params.username // krock
// params의 값은 위와 같다.