Jieunny์ ๋ธ๋ก๊ทธ
S2) Unit 10. [์ค์ต] StatesAirline Server ๋ณธ๋ฌธ
๐ฃ Express ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํด์ StatesAirline Server ๊ตฌ์ถํ๊ธฐ
๐ req.query
โฐ ๊ฒฝ๋ก์ ๊ฐ ์ฟผ๋ฆฌ ๋ฌธ์์ด ๋งค๊ฐ ๋ณ์์ ๋ํ ์์ฑ์ด ํฌํจ ๋ ๊ฐ์ฒด(GET ๋ฐฉ์์ผ๋ก ๋์ด์ค๋ ๋ฐ์ดํฐ์ ์ฟผ๋ฆฌ์คํธ๋ง์ด ๋ด๊ธด๋ค)
โฐ www.example.com/post/1/jun?title=hello! ์ด๋ฉด, title=hello! ๋ฅผ ๊ฐ์ฒด๋ก ๊ฐ์ ธ์จ๋ค.
๐ req.params
โฐ ๋ผ์ฐํฐ์ ๋งค๊ฐ๋ณ์
โฐ /:id/:name ๊ฒฝ๋ก๊ฐ ์์ผ๋ฉด ':id' ์์ฑ๊ณผ ':name' ์์ฑ์ req.params.id, req.params.name์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
๐ req.body
โฐ json ๋ฑ์ ๋ฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ๋ ์ฌ์ฉํ๋ค(POST ๋ฐฉ์์ผ๋ก ๋์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ๋ด๋๋ค)
โฐ ์์ฒญ ๋ณธ๋ฌธ์ ์ ์ถ ๋ ํค,๊ฐ ๋ฐ์ดํฐ ์์ ํฌํจํ๋ค.
โฐ req.body๋ body-parser๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก undefined๋ก ์ค์ ๋๊ธฐ ๋๋ฌธ์ body-parser๋ฅผ ์ฌ์ฉํด์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
โฐ express.jon(), express.urlencoded() ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
1๏ธโฃ flightController.js
const flights = require('../repository/flightList');
const fs = require('fs');
module.exports = {
// [GET] /flight
// ์์ฒญ ๋ ํ๋ผ๋ฏธํฐ departure_times, arrival_times ๊ฐ๊ณผ ๋์ผํ ๊ฐ์ ๊ฐ์ง ํญ๊ณตํธ ๋ฐ์ดํฐ๋ฅผ ์กฐํํฉ๋๋ค.
// ์์ฒญ ๋ ํ๋ผ๋ฏธํฐ departure, destination ๊ฐ๊ณผ ๋์ผํ ๊ฐ์ ๊ฐ์ง ํญ๊ณตํธ ๋ฐ์ดํฐ๋ฅผ ์กฐํํฉ๋๋ค.
findAll: (req, res) => {
const { departure_times, arrival_times, destination, departure } = req.query;
// ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ์ ๋ณด๋ฅผ req.query๋ฅผ ์ฌ์ฉํด์ ๋ด์์จ๋ค.
// TODO:
if(departure_times && arrival_times){
// ๋ง์ฝ ์ฌ์ฉ์๊ฐ ์์ฒญํ ์ ๋ณด๊ฐ ์๋ค๋ฉด
const filteredFlights = flights.filter((flight) => {
// filter ํจ์๋ฅผ ์ฌ์ฉํด์ ์ฌ์ฉ์๊ฐ ์์ฒญํ ์ ๋ณด๋ ๊ฐ์ ๋ฐ์ดํฐ๋ง ์กฐํํ๋ค.
return flight.departure_times === departure_times && flight.arrival_times === arrival_times;
});
return res.status(200).json(filteredFlights);
// ์์ฒญ์ด ์ฑ๊ณตํ์๊ณผ ๋์์ ๋ด๊ฐ ํํฐ๋งํ ๋ฐ์ดํฐ๋ฅผ json ํํ๋ก ๋ณด๋ธ๋ค.
}
if(destination && departure){
// ์ ์ฝ๋์ ๊ฐ์ ๋ฐฉ์
const filteredFlights = flights.filter((flight) => {
return flight.destination === destination && flight.departure === departure;
});
return res.status(200).json(filteredFlights);
}
return res.status(200).json(flights);
},
// [GET] /flight/:uuid
// ์์ฒญ ๋ uuid ๊ฐ๊ณผ ๋์ผํ uuid ๊ฐ์ ๊ฐ์ง ํญ๊ณตํธ ๋ฐ์ดํฐ๋ฅผ ์กฐํํฉ๋๋ค.
findById: (req, res) => {
const { uuid } = req.params;
// req.params์ ์ฌ์ฉํด์ uuid ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
// TODO:
if(uuid){
// ์์ฒญ ๋ uuid ๊ฐ๊ณผ ๊ฐ์ uuid ๊ฐ์ ๊ฐ์ง ํญ๊ณตํธ์ ์กฐํํ๋ค.
const filteredFlights = flights.filter((flight) => {
return flight.uuid === uuid;
});
return res.status(200).json(filteredFlights);
}
},
// Advanced
// [PUT] /flight/:uuid ์์ฒญ์ ์ํํฉ๋๋ค.
// ์์ฒญ ๋ uuid ๊ฐ๊ณผ ๋์ผํ uuid ๊ฐ์ ๊ฐ์ง ํญ๊ณตํธ ๋ฐ์ดํฐ๋ฅผ ์์ณฅ ๋ Body ๋ฐ์ดํฐ๋ก ์์ ํฉ๋๋ค.
update: (req, res) => {
const { uuid } = req.params;
const bodyData = req.body;
if(uuid){
// ์์ฒญ ๋ uuid ๊ฐ๊ณผ ๊ฐ์ uuid ๊ฐ์ ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ์กฐํํด์ ๋ด๋๋ค.
const filtered = flights.filter((flight) => {
return flight.uuid === uuid;
});
const updateData = Object.assign(filtered[0], bodyData);
// ํํฐ๋ง๋ ๋ฐ์ดํฐ๋ ๋ฐฐ์ด๋ก ๋ด๊ฒจ ์์ผ๋ฏ๋ก ๊ทธ ๋ฐ์ดํฐ์ 0๋ฒ์งธ๋ฅผ ์์ฒญ ๋ body ๋ฐ์ดํฐ๋ก ๋ฐ๊ฟ์ค๋ค.
return res.status(200).json(updateData);
// ๋ฐ๊พผ ๋ฐ์ดํฐ๋ฅผ ์๋ต์ผ๋ก ๋๋ ค์ค๋ค.
}
}
};
2๏ธโฃ 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;
// ์์ฒญ ๋ phone ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
if(phone){
// ์์ฒญ ๋ phone ๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ํํฐ๋ง
const filteredList = booking.filter((item) => {
return item.phone === phone;
})
return res.status(200).json(filteredList);
}
},
// [GET] /book/:phone/:flight_uuid ์์ฒญ์ ์ํํฉ๋๋ค.
// ์์ฒญ ๋ id, phone๊ณผ ๋์ผํ uuid, phone ์์ฝ ๋ฐ์ดํฐ๋ฅผ ์กฐํํฉ๋๋ค.
findByPhoneAndFlightId: (req,res) => {
const {phone, flight_uuid} = req.params;
// ์์ ๊ฐ์ ๋ฐฉ์
// TODO:
if(phone && flight_uuid){
const filteredList = booking.filter((item) => {
return item.phone === phone && item.flight_uuid === flight_uuid;
})
return res.status(200).json(filteredList);
}
},
// [POST] /book ์์ฒญ์ ์ํํฉ๋๋ค.
// ์์ฒญ ๋ ์์ฝ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค.
create: (req, res) => {
// POST /book์์ ์ฌ์ฉํ booking_uuid์
๋๋ค.
const booking_uuid = uuid();
// uuid๋ฅผ ์์ฑํ๊ณ
// TODO:
req.body.booking_uuid = booking_uuid;
// ์ ์ฅํ ๋ฐ์ดํฐ์ uuid๋ฅผ ์์ฑํ uuid๋ก ์ง์ ํด์ค๋ค.
booking.push(req.body);
// booking ๋ฐ์ดํฐ ๋ฐฐ์ด์ req.body๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ค๋ค.
return res.status(200).json(booking);
// ์ต์ข
์ ์ผ๋ก ๋ฐ์ดํฐ๋ค์ด ๋ด๊ธด booking ๋ฐ์ดํฐ๋ฅผ ์๋ต์ผ๋ก ๋ฐํํ๋ค.
},
// Optional
// [DELETE] /book/:booking_uuid ์์ฒญ์ ์ํํฉ๋๋ค.
// ์์ฒญ ๋ id, phone ๊ฐ๊ณผ ๋์ผํ ์์ฝ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํฉ๋๋ค.
deleteByBookingId: (req, res) => {
const {booking_uuid} = req.params;
// ์์ฒญ ๋ uuid๋ฅผ ๋ฐ์์ค๊ณ
// TODO:
if(booking_uuid){
const filteredList = booking.filter((item) => {
// ์ญ์ ํ๋๊ฑฐ๋๊น ๊ทธ uuid์ ๊ฐ์ง ์์ ๋ฐ์ดํฐ๋ค๋ง ํํฐ๋ง ํด์ค๋ค.
return item.booking_uuid !== booking_uuid;
});
return res.status(200).json(filteredList);
// ๊ฒฐ๊ณผ์ ์ผ๋ก uuid์ ๊ฐ์ ๋ฐ์ดํฐ๋ ํํฐ๋ง๋์ ์ญ์ ๋ ๊ฒ ์ฒ๋ผ ๊ตฌํ๋๋ค.
}
}
};
'CodeStates > Training' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
S3) Unit 1. [์ค์ต] JSON.stringify (0) | 2023.02.14 |
---|---|
S2) Unit 11. [์ค์ต] Cozโ Mini Hackathon (์๊ณ ๋ผ์คํ ์ด์ธ ์๋ฒ) (0) | 2023.02.09 |
S2) Unit 10. [์ค์ต] Mini Node Server (0) | 2023.02.06 |
S2) Unit 9. [์ค์ต] StateAirline Client (0) | 2023.02.03 |
S2) Unit 6. [์ค์ต] React Twittler State & Props (0) | 2023.01.27 |