Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- loop
- Class
- 백준
- 오류
- Tutorial
- dynamic
- guide
- 파이썬
- DP
- String
- Basic
- Unity
- Material
- C#
- Algorithm
- 시작해요 언리얼 2022
- 재귀
- 프로그래밍
- W3Schools
- UE5
- Programming
- 기초
- parameter
- Unreal Engine 5
- w3school
- c++
- python
- dfs
- github
- 문제풀이
Archives
- Today
- Total
행복한 개구리
Nodejs 복습 21.07.17. 웹 프로그래밍 기초 본문

우선 프로토콜 문서를 따라 작성할 예정이다.
프로토콜문서는 웹서버를 개발할 때 일종의 개발 계획서 또는 개발 기획서 같은 개념이라고 한다.
이전에 수업했던 내용을 토대로 작성해보았다.
이를 바탕으로 로컬 웹 서버를 구축해보자.
우선 VSC를 켜고 사용할 폴더를 만든 다음, 해당 폴더로 경로이동하자.
그리고 npm init -y를 해주고 expresss를 깔아준다. (+nodemon 또는 supervisor는 선택)
const express = require("express");
const app = express();
const moment = require("moment");
const port = 3030;
app.use(express.json());
const customers = [];
app.get("/", (req,res)=>{
res.send("Hello Express!")
});
app.listen(port, ()=>{
console.log(`Server is waiting on ${port} port`);
});
- express를 임포트하고, json을 사용한다. => json은 후에 body내용을 가져오기 위해서 사용한다.
- 그리고 포트 번호를 정한 뒤 서버를 실행한다
그리고 고객이 상품을 구매했을 때와 구매내역 조회를 구현하자.
app.post("/purchases", (req, res) => {
const { userId, goodsId } = req.body;
const date = moment().format("YYYY-MM-DD hh:mm:ss");
if (goodsId === undefined) {
res.status(500).send("구매 상품을 선택해주세요");
} else {
const customer = { userId, goodsId, date };
customers.push(customer);
res.send(`${userId}번 고객이 ${goodsId} 상품을 ${date}에 구입했습니다.`);
}
});
- req.body의 내용을 가져올 때 위에서 선언한 express.json()이 사용된다.
- 그리고 등록을 할 때는 userId와 goodsId를 객체로 가져온다 => 객체로 선언하여 각각의 항목을 가져올 수 있다.
- 단, 항목의 이름과 객체의 이름이 일치해야 한다.
- moment를 통해 작성한 형석(format)으로 등록한 시간을 저장한다.
- 다음으로는 만약 고객의 ID 또는 상품의 ID가 기입되지 않았을 경우, 상품을 구매하지 않았으므로 상태코드 500과 함께 다시 입력해달라는 메시지를 출력한다.

- 만약 제대로 상품을 구매했다면 해당 고객을 구매고객 배열에 추가하고 해당 고객이 어느 상품을 언제 구매했는지를 출력한다.

이제 해당 고객의 정보를 얻어오자.
app.get("/purchases/firsttime", (req, res) => {
const {userId} = req.body;
const result = customers.find((customer) => customer.userId === parseInt(JSON.stringify(userId)));
console.log(result);
if (result === undefined) {
res.status(500).send("잘못된 고객 고유번호입니다.");
} else {
res.send(
`${result.userId}번 고객이 ${result.goodsId} 상품을 ${result.date}에 구매했습니다.`
);
}
});
- 정보를 얻어오고 싶을 때는 get을 사용한다.
- 그리고 기입된 정보(userId)와 일치하는 고객의 정보를 찾아낸다. => 일치하는 한 명만 찾을 수 있다. 검색 결과로는 가장 먼저 등록된 정보가 출력된다.
- 만약 해당 정보가 없다면 상태코드 500과 함께 잘못 검색했다는 메시지를 출력한다.

- 하지만 정상적으로 검색했다면 검색결과를 출력한다.

위에서는 한명만 찾아보았으니 이제 여러명을 결과로 얻어올 수 있게 검색해보자.
app.get("/purchases", (req, res, next) => {
const {userId} = req.body;
const id = JSON.stringify(userId);
if(userId === undefined){
res.send("고유 번호를 입력하세요");
}else{
const results = customers.filter((customers) => customers.userId >= parseInt(id));
if (results.find((result) => result.userId === parseInt(id)) === undefined) {
res.status(500).send("검색 결과가 없습니다.");
} else {
messages = [];
for (let i = 0; i < results.length; i++) {
let message = `${results[i].userId}번 고객이 ${results[i].goodsId} 상품을 ${results[i].date}에 구매했습니다.`;
messages.push(message);
}
res.status(200).send(messages);
}
}
});
- 마찬가지로 검색조건(userId)를 가져온 뒤 filter함수를 사용하여 해당조건에 부합하는 데이터를 모두 출력한다.
- 중간에 message로 string형식으로 변환하여 출력하는 방식을 사용했다.

- 만약 userId를 입력조차 하지 않았다면 상태코드 500과 함께 고유번호를 입력하라고 한다.

- userId가 존재한다면 검색을 하고, 검색결과가 없다면 검색결과가 없다는 메시지를 출력하고

- 있다면 메시지들을 formatting하여 출력한다.
전체코드
const express = require("express");
const app = express();
const port = 3030;
const moment = require("moment");
app.use(express.json());
const customers = [];
let messages = [];
app.get("/purchases/firsttime", (req, res) => {
const {userId} = req.body;
const result = customers.find((customer) => customer.userId === parseInt(JSON.stringify(userId)));
if (result === undefined) {
res.status(500).send("잘못된 고객 고유번호입니다.");
} else {
res.send(
`${result.userId}번 고객이 ${result.goodsId} 상품을 ${result.date}에 구매했습니다.`
);
}
});
app.get("/purchases", (req, res, next) => {
const {userId} = req.body;
const id = JSON.stringify(userId);
if(userId === undefined){
res.status(500).send("고유 번호를 입력하세요");
}else{
const results = customers.filter((customers) => customers.userId >= parseInt(id));
if (results.find((result) => result.userId === parseInt(id)) === undefined) {
res.send("검색 결과가 없습니다.");
} else {
messages = [];
for (let i = 0; i < results.length; i++) {
let message = `${results[i].userId}번 고객이 ${results[i].goodsId} 상품을 ${results[i].date}에 구매했습니다.`;
messages.push(message);
}
res.send(messages);
}
}
});
app.post("/purchases", (req, res) => {
const { userId, goodsId } = req.body;
const date = moment().format("YYYY-MM-DD hh:mm:ss");
if (goodsId === undefined || userId === undefined) {
res.status(500).send("잘못된 형식입니다. 다시 입력해주세요");
} else {
const customer = { userId, goodsId, date };
customers.push(customer);
res.send(`${userId}번 고객이 ${goodsId} 상품을 ${date}에 구입했습니다.`);
}
});
app.listen(port, () => {
console.log(`Server is waiting on ${port} port`);
});
여기까지 웹프로그래밍 기초가 끝났다.
JS는 처음이기도 하고 Node도 거의 안해봐서 잘 모르겠지만 API를 찾아가며 하니 오래걸려도 되긴 되는듯 하다.
어쨋든 코드라서 논리의 영역이기도 하고 그다지 복잡한 과정은 작성하지 않아서 할 만했다.
'Node > 복습' 카테고리의 다른 글
| Node 복습 21.06.03. Node.js - Cookie & Server (0) | 2021.06.03 |
|---|