Daily Front_Minhhk

stateLine Server 본문

카테고리 없음

stateLine Server

Minhhk 2022. 12. 14. 16:46

Express 공식문서에서 req.query , req.params를 사용하는 방법을 확인!

req.query

**// localhost:3000/topic?id=1&name=foo
app.get('/topic', function(req, res) {
    res.send(req.query.id + ',' + req.query.name);
})**

위 코드는 id과 name 값을 동시에 가져올 수 있다. localhost:3000/topic?id=1&name=foo 에 들어간다고 가정하자.

화면에 1,foo 가 보일 것이다.

**// localhost:3000/topic?id=1
app.get('/topic', function(req, res) {
    var topics = [
        'JavaScript is ....',
        'Nodejs is ....',
        'Express is ....',
    ];
    res.send(topics[req,query.id]);
    })**

위 코드는 배열로 값들을 가져온다. localhost:3000/topic?id=1 에 들어간다고 가정하면, id가 1이기 때문에 topic[1]인 Nodejs is....가 화면에 보인다.

실제로는 topics에 파일이나 데이터베이스로 교체해서 짧은 코드로 값을 가져올 것이다.

req.params

**//localhost:3000/page/CSS
app.get('page/:pageId', function(req, res) {
    res.send(req.params);
})**

localhost:3000/page/CSS에 들어간다고 하면 아래와 같은 결과가 나올 것이다.

{"pageId : "CSS"}

req.params안에는 객체가 들어가 있고, 그 객체의 pageId 프로퍼티 값을 통해서 CSS라는 값을 가져온다는 뜻이다.

**//localhost:3000/page/CSS/WEB
app.get('page/:pageId/:chaperId', function(req, res) {
    res.send(req.params);
})**
**{"pageId" : "CSS", "chaperId": "WEB"}**

 


 

 

response는 어떠한 작업을 요청한 곳에 무엇인가를 돌려주는 역할을 한다.

app.get('/', (req, res) => {
  res.send()
  res.json({ message: "'I'm Jason Mraz." })
  res.end()
})
  • res.send() : 정보를 돌려보내 주는 가장 기본적인 역할을 수행한다.
  • res.json() : 정보를 돌려보내긴하는데, json 형태로 바꿔서 돌려준다.
  • res.end() : 주로 서버가 작동을 안하거나 오류가 있을 경우, 특정 문구를 나타내고 응답을 종료하고자 할 때 사용된다.

 

flightController.js

const flights = require("../repository/flightList");
const fs = require("fs");

module.exports = {
  // [GET] /flight
  findAll: (req, res) => {
    const { departure_times, arrival_times, destination, departure } =
      req.query;
    // TODO:
    //! 요청 된 파라미터 departure_times, arrival_times 값과 동일한 값을 가진 항공편 데이터를 조회합니다.
    if (departure_times && arrival_times) {
      // 다음 데이터 조회 filter
      let timeList = flights.filter((list) => {
        return (
          list.departure_times === departure_times &&
          list.arrival_times === arrival_times
        );
      });
      //? res.json() >>> json 형태로 바꿔서 돌려준다
      return res.json(timeList);
    }
    //! 요청 된 파라미터 departure, destination 값과 동일한 값을 가진 항공편 데이터를 조회합니다.
    if (departure && destination) {
      let place = flights.filter((list) => {
        return list.departure === departure && list.destination === destination;
      });
      return res.json(place);
    }

    return res.json(flights);
  },
  // [GET] /flight/:uuid
  // 요청 된 uuid 값과 동일한 uuid 값을 가진 항공편 데이터를 조회합니다.
  findById: (req, res) => {
    const { uuid } = req.params;
    // TODO: flight 와 동일한 방식대로 조회
    if (uuid) {
      let flightUuid = flights.filter((data) => {
        return data.uuid === uuid;
      });
      return res.json(flightUuid);
    }
  },

  // Advanced
  // [PUT] /flight/:uuid 요청을 수행합니다.
  // 요청 된 uuid 값과 동일한 uuid 값을 가진 항공편 데이터를 요쳥 된 Body 데이터로 수정합니다.
  update: (req, res) => {
    const { uuid } = req.params;
    const bodyData = req.body;
    // TODO:
    // 업데이트가 될 인덱스를 변수에 저장합니다
    const beUpdatedIdx = flights.findIndex(flight => flight.uuid === uuid)
    const updatedFlight = {...flights[beUpdatedIdx], bodyData}

    // 기존 배열에 인덱스를 찾아서 바꾸기
    // flight.splice(바꿀 인덱스, 몇개 바꿀지?, 뭘로 바꿀지)
    flights.splice(beUpdatedIdx,1,updatedFlight)
    return res.status(200).json(updatedFlight)
  },
};

 

 

bookController.js

// POST /book에서 사용할 uuid입니다.
const { v4: uuid } = require("uuid");
// 항공편 예약 데이터를 저장합니다.
let booking = [];

module.exports = {
  // [GET] /book 요청을 수행합니다.
  // 전체 예약 데이터를 조회합니다.
  findAll: (req, res) => {
    return res.status(200).json(booking);
  },
  // [GET] /book/:phone 요청을 수행합니다.
  // 요청 된 phone과 동일한 phone 예약 데이터를 조회합니다.
  findByPhone: (req, res) => {
    const { phone } = req.params;
    //TODO:
    if (phone) {
      let phoneList = booking.filter((list) => {
        return list.phone === phone;
      });
      return res.status(200).json(phoneList);
    }
  },
  // [GET] /book/:phone/:flight_uuid 요청을 수행합니다.
  // 요청 된 id, phone과 동일한 uuid, phone 예약 데이터를 조회합니다.
  findByPhoneAndFlightId: (req, res) => {
    const { phone, flight_uuid } = req.params;
    // FIXME:
    if (phone && flight_uuid) {
      let phoneList = booking.filter((list) => {
        return list.phone === phone && list.flight_uuid === flight_uuid;
      });
      return res.status(200).json(phoneList);
    }
  },
  // [POST] /book 요청을 수행합니다.
  // 요청 된 예약 데이터를 저장합니다.
  create: (req, res) => {
    //! POST /book에서 사용할 booking_uuid입니다.
    const booking_uuid = uuid();
    const { flight_uuid, name, phone } = req.body;
    // 바디로 들어오는 필수 데이터
    // 있는지 없는지 체크, 이미 있으면 돌려보낸다
    if(booking.find(book => book.phone === phone && book.flight_uuid === flight_uuid )){
      return res.status(409).json("It's Already booked.")
    }
    else{
      // 기존 배열에 인덱스를 변수에 저장
      // 
      booking.unshift({booking_uuid, flight_uuid, name, phone});
      res.location(`/book/${booking_uuid}`);
      return res.status(201).json(booking[0])
    }
  },

  // Optional
  // [DELETE] /book/:booking_uuid 요청을 수행합니다.
  // 요청 된 id, phone 값과 동일한 예약 데이터를 삭제합니다.
  deleteByBookingId: (req, res) => {
    const { booking_uuid } = req.params;
    // TODO:
    booking = booking.filter(book => book.booking_uuid !== booking_uuid)
    return res.status(200).json(booking_uuid)
  },
};