Node/복습

Nodejs 복습 21.07.17. 웹 프로그래밍 기초

HappyFrog 2021. 7. 17. 20:37

가운데서... 푸른 섬광이..!

 

우선 프로토콜 문서를 따라 작성할 예정이다.

프로토콜문서는 웹서버를 개발할 때 일종의 개발 계획서 또는 개발 기획서 같은 개념이라고 한다.

이전에 수업했던 내용을 토대로 작성해보았다.

 

이를 바탕으로 로컬 웹 서버를 구축해보자.


우선 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를 찾아가며 하니 오래걸려도 되긴 되는듯 하다.

어쨋든 코드라서 논리의 영역이기도 하고 그다지 복잡한 과정은 작성하지 않아서 할 만했다.