
Server 의 종류
web server : 웹 페이지(화면을 그리는데 필요한 재료)를 response 의 body 에 담아서 보내주는 서버
api server : 요청을 처리하고 처리한 결과를 response body 에 JSON 등의 형식으로 담아 보내주는 서버
Node.js 환경 위에서 실행될 서버 프로그램을 만들 때 사용할 수 있는 웹 프레임워크이다.
다른 프레임워크에 비해, 프로그램 전체 구조에 관해서 미리 정해진 패턴이 없는 편이라서 좀더 자유롭게 패턴을 구현할 수 있다.
const express = require('express'); // express 패키지를 가져온다.
const app = express(); // express 패키지가 리턴하는 객체를 사용한다. 관습적으로 `app` 이라는 이름이 붙는다.
app.get('/', (req, res) => {
res.send('<h1> Home </h1>'); // `/` 경로에 접근하면 <h1>home</h1> 으로 응답
});
app.listen(3000, () => {
console.log('Server is running on port 3000'); // 3000 번 포트에 잘 연결되면 실행
});
Express에서는 URL의 path 부분 중 변하는 값이 들어가는 부분은 콜론(:)을 앞에 붙여서 표현하고 이를 Route Parameter라고 한다.
/members 를 접속하면 모든 members 의 정보(resource)가 조회되고,
members/:id 로 접속하면 특정 member 의 정보가 조회되도록 하는 예시
// members.js
module.exports = [
{ id: 1, name: 'John Doe', /* .. 생략 */ },
{ id: 2, name: 'Jane Lee', /* .. 생략 */ },
/* .. 생략 */
]
// main.js
const express = require('express');
const app = express();
const members = require('./members'); // members 정보가 담긴 배열을 불러와 사용
app.get('/api/members', (req, res) => {
res.send(members); // string 타입 외에도 배열, 객체 등의 타입을 보낼 수 있다. json 형식으로 변환되어 response body 에 담겨 보내지게 된다.
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});

members 전체 조회
app.get('/api/members/:id', (req, res) => {
const { id } = req.params; // request.params 객체에서 `:` 이후 파라미터를 가져올 수 있다.
const member = members.find(member => member.id === parseInt(id));
if (member) {
res.send(member);
} else {
res.status(404).send({ // header 에 status 를 404 로, body 에 send 에 담긴 내용을 보낼 수 있다.
message: `Member with id ${id} not found`,
});
}
});

member 1 조회

없는 member 조회

없는 member 조회 header

없는 member 조회 body
특정 query에 해당하는 members 의 정보가 조회되도록 하는 예시
/members?[query]=[조건] query 의 조건과 일치하는 members 의 정보만 요청했을 때 응답해줄 수 있다.
/members?team=sales team 이 sales 인 members 만 조회// main.js
const express = require('express');
const app = express();
const members = require('./members');
app.get('/api/members', (req, res) => {
const { team } = req.query // 요청 query 에 team 이 있는 경우
if(team){ // members 의 team 정보와 일치하는 members 의 정보만 보내준다
const teamMembers = members.filter(member => member.team === team);
} else {
res.send(members);
}
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});

크롬에서 JSON 을 예쁘게 보여주는 익스텐션 : 🔗 JSON Viwer