직원 정보 조회

박은지·2022년 2월 13일
0

Express

목록 보기
3/10

[예제1] Express 이용한 간단한 서버 프로그램 만들기

Express를 이용하여 간단한 서버 프로그램을 만들어보자.

// --------------- Express를 이용해서 간단한 서버 프로그램 만들기 ---------------- // 
///// 1. 현재 디렉토리(cowork)를 하나의 패키지로 만들기
// - npm init
// - name만 "cowork-api-server"로 지정하고, 다른 것은 기본값으로 지정
// - 완료되면 package.json 파일이 생성됨

///// 2. Express 패키지 설치
// - npm install Express

///// 3. 코드작성
// 1) Express 패키지에서 공개하는 것을 가져온다.
const express = require('express');

// 2) Express 패키지는하나의 함수를 외부로 공개하는데 그 함수를 실행해준다.
//  - 실행된 함수는 하나의 객체를 리턴한다.
//  - 이 객체는 관습적으로 app이라는 이름을 붙여 사용한다. --> app 객체
const app = express();


// 3) Example [Node.js 기본기 토픽 참고]

// - 외부의 클라이언트가 보낸 리퀘스트의 URL Path 부분이 '/hello'이면, 콜백함수 실행
// - 특정 Path에 대응하는 콜백을 "route handler"이라고 부름
//   --> route : 서버가 간? request의 Path부분을 보고 알맞은 작업 수행
//   --> handler : 그 작업을 담당하는 존재를 의미

// route handler
// - req (request 객체) : 이 객체를 통해 클라이언트가 보낸 request를 다룰 수 있음
// - res (response 객체) : 이 객체를 통해서 적절한 response를 보낼 수 있음
app.get('/hello', (req, res) => {
  res.send('<h1>Hello Express!</h1>');
})


// listen 메소드 : 외부에서 request가 오는 것을 기다리도록 함 ---> 이것을 작성해야 외부에서 request를 받을 수 있음!
// 포트 번호 (Port Number) : 서버 안에서 실행되는 여러 프로그램들 중 특정 프로그램을 식별할 수 있게 해주는 번호
// app.listen(3000);
// [8번] 여기서 추가해준 콜백 ---> 이 콜백함수는 서버가 외부의 request를 들을 준비를 마치고 나면 자동으로 실행된다.
app.listen(3000, () => {
  console.log('Server is listening...');
});


///// 4. 터미널에 node app.js로 서버 실행

///// 5. 브라우저에서 localhost:3000/hello 접속
// 'localhost'는 내 컴퓨터를 의미하는 127.0.0.1과 같은 의미, 일종의 닉네임처럼 사용 가능
// '3000'은 Port 번호
// '/hello'는 Path 부분

///// 6."Hello Express!" 메시지를 볼 수 있다.

///// 7. 잠시 서버 종료 
// 터미널에 Ctrl + C

///// 8. app.listen 메소드 부분에 콜백함수 추가
// 추가한 콜백함수는 서버가 외부의 request를 들을 준비를 마치고 나면 자동으로 실행된다.

///// 9. 터미널에 node app.js로 서버 재실행 & 브라우저에서 localhost:3000/hello 접속
// 결과 :
// - 터미널에서는 "Server is listening..."" 메시지를, 
//   (** 서버가 정상적으로 실행되었는지 확인하기 위해 이런 방식을 사용하기도 한다! **) 
// - 브라우저에서는 "Hello Express!" 메시지를 확인할 수 있다.

[예제2] API 서버 만들기

이번에는 API 서버를 만들어보자.

// ------------------------- API 서버 만들기 ----------------------------- // 

// cowork에 직원 정보 관리 웹서비스에서 사용할 API 서버를 만들 것이다.

// Q. 직원 정보는 어디에 저장 ? --> 데이터베이스 (Database)


///// 1. 코드 수정 

const express = require('express');

const app = express();

const members = require('./members.js');

// 보통 api 서버에 관한 URL은 Path부분에 api라는 단어를 포함시키는 경우가 많다.
// 또는 도메인 자체에 api 단어를 포함시키기도 한다. [] ex. http://api.cowork.com/~ ]
app.get('/api/members', (req, res) => {
  res.send(members);
})

// [3번] Route Parameter 설정 & 값 가져오기
// Path 부분 뒤에 새로 추가한 ":id" 의미
// - 문자열 아님!
// - 이 위치에 오는 값(members/ 뒤에 오는 값)을 id 변수에 대입하라는 뜻!  ---> 이렇게 가변적인 값을 담는 부분을 Express에서는 Route Parameter 라고 부른다.
app.get('/api/members/:id', (req, res) => {

  //// (1) 값 가져오기
  // Route Parameter의 값은 req 객체의 params라는 객체의 property로 설정되어 있다.
  // const id = req.params.id;
  const { id } = req.params; // 비구조할당

  //// (2) id에 해당하는 직원 찾기
  // find 메소드는 값이 없으면 undefined를 리턴 ---> false 의미
  const member = members.find( (m) => m.id === Number(id));

  //// (3) 
  // - 직원정보가 있으면 response의 body에 담아서 보내고
  // - 없으면(find 메소드의 리턴값이 false이면) 
  if (member) {
    res.send(member);
  } else {
    // - 상태코드 ---> status 메소드
    //   참고 : https://www.codeit.kr/learn/courses/nodejs-backend-development/'https://www.codeit.kr/learn/courses/javascript-intermediate/4357'
    //   요청한 정보가 없다는 의미의 404
    // - response의 body에 "There is no such member" 메시지 담기 ---> send 메소드
    //   API 서버에서는 문자열 자체를 주는 것보다 JSON 객체 안에 넣어서 주는 것이 더 좋음 
    //   ( WHY? 나중에 response에 추가적인 정보를 더 넣어줄 때 확장하기 쉬움)
    // res.status(404).send('There is no such member');  // 비추ㅠ
    res.status(404).send({ message : 'There is no such member' });  // 추천!!
  }

})

app.listen(3000, () => {
  console.log('Server is listening...');
});

///// 2. 터미널에 node app.js로 서버 재실행 & 브라우저에서 localhost:3000/api/mambers 접속
// 결과 : 직원 정보가 담긴 배열 확인 가능

///// 3. Route Parameter 설정 & 값 가져오기
// Path부분에서 "/api/members/id값" 이렇게 members 뒤에 해당 직원의 id값을 넣고 request를 보내면 id에 해당하는 직원정보를 돌려주도록 코드 수정

[예제3] 쿼리

📌 쿼리(Query)

특정 팀에 속한 직원의 정보를 조회해보자.

// ------------------ 특정 팀에 속한 직원 정보 조회하기 -------------------// 

// URL은 어떤 방식으로?
// http://localhost:3000/api/members?team=팀명 
// --> 여기서 "?" 이후의 부분을 "쿼리(Query)"라고 한다.


const express = require('express');

const app = express();

const members = require('./members.js');


app.get('/api/members', (req, res) => {

  // URL의 Query에서 team이라는 parameter 값 가져오기
  const team = req.query.team;
  
  // URL에 team이라는 parameter가 존재할 경우 : 팀에 해당하는 직원 정보만 
  //              "               존재하지 않을 경우 : 전체 직원정보
  if(team) {
    const teamMembers = members.filter((m) => m.team === team);
    res.send(teamMembers);
  } else {
    res.send(members);
  }

});


app.get('/api/members/:id', (req, res) => {

  const { id } = req.params; 

  const member = members.find( (m) => m.id === Number(id));

  if (member) {
    res.send(member);
  } else {
    res.status(404).send({ message : 'There is no such member' });
  }

})


app.listen(3000, () => {
  console.log('Server is listening...');
});

0개의 댓글