본문 바로가기

개발자의 logs

node.js - 블로그 구현 / 블로그 api 본문

개발 공부지식/*개발 공부*

node.js - 블로그 구현 / 블로그 api

주인장v 2022. 5. 24. 22:47

 

 

참여중인 부트캠프에서 node.js 개인 과제로 블로그 api 구현 과제를 받았다.

 

 

 

아래는 과제 상세내용이다 !

 

Goal: "Node.js와 express로 로그인 기능이 없는 나만의 항해 블로그 백엔드 서버 만들기"

 

  • 학습 과제를 끝내고 나면 할 수 있어요!
    1. Node.js를 이용해서 웹 프레임워크를 구성 할 수 있어요.
    2. mongoDB와 mongoose를 이용하여 원하는 데이터베이스를 만들고 활용할 수 있어요.
    3. express를 기반으로 CRUD(Create, Read, Update, Delete) 기능이 포함된 REST API를 만들 수 있어요.
    4. AWS에 express와 mongoDB 서비스를 배포할 수 있어요.

 

 ✅ 서비스 완성

  1. 전체 게시글 목록 조회 API
    • 제목, 작성자명, 작성 날짜를 조회하기
    • 작성 날짜 기준으로 내림차순 정렬하기
  2. 게시글 작성 API
    • 제목, 작성자명, 비밀번호, 작성 내용을 입력하기
  3. 게시글 조회 API
    • 제목, 작성자명, 작성 날짜, 작성 내용을 조회하기 (검색 기능이 아닙니다. 간단한 게시글 조회만 구현해주세요.)
  4. 게시글 수정 API
    • API를 호출할 때 입력된 비밀번호를 비교하여 동일할 때만 글이 수정되게 하기
  5. 게시글 삭제 API
    • API를 호출할 때 입력된 비밀번호를 비교하여 동일할 때만 글이 삭제되게 하기

✅ AWS 배포

  1. EC2 배포
    • Ubuntu EC2 를 구매한 뒤, 노드 포트(3000)를 80번 포트로 포워딩해서 포트 번호 없이도 서비스에 접속 가능하도록 하기
    • → 수업시간에 배웠던 iptable을 사용하기
    • mongoDB를 EC2 내부에 설치해서 연결하기

 

 

 

API 구현 코드 (CRUD) :

 

1. 전체 게시글 목록 조회 API

 

router.get("/lists", async (req, res) => {

    const lists = await Lists.find();

    res.json({

        lists,
    });

});

 

2. 게시글 작성 API

// 중복 게시물 검사 및 게시물 작성 (Validation)

router.post("/lists", async (req, res) => {
	const { title, name, data, password } = req.body;

  const lists = await Lists.find({ title });


  var now = dayjs();
  var time = now.format();

  time = time.slice(0,16).split('T').join(' ')
  

  if (lists.length) {
    return res.status(400).json({ success: false, errorMessage: "이미 있는 데이터입니다." });
  }

  const createdLists = await Lists.create({ title, name, data, password, time });

  res.json({ lists: createdLists });
  


});

 

3. 게시글 조회 API

// 타이틀로 목록 조회

router.get("/lists/:title", (req, res)=>{

    const {title} = req.params;


    res.json({


        detail: lists.filter((item)=>{

            return item.title === title;

        })[0],

    });

});


// 작성자명으로 조회 

router.get("/lists/:name", (req, res)=>{

    const {name} = req.params;


    res.json({


        detail: lists.filter((item)=>{

            return item.name === name;

        })[0],

    });

});

// 작성 날짜로 조회

router.get("/lists/:data", (req, res)=>{

    const {data} = req.params;


    res.json({


        detail: lists.filter((item)=>{

            return item.data === data;

        })[0],

    });

});

 

4. 게시글 수정 API

 

// 게시글 수정 API
// - API를 호출할 때 입력된 비밀번호를 비교하여 동일할 때만 글이 수정되게 하기

router.put("/lists/:title", async (req, res) => {
    const {title} = req.params;
    const {data} = req.body;
    const {password} = req.body;


    // 없을 때

    const [existsLists] = await Lists.find({title});
    
    // console.log(existsLists.length); // 셀수가 없다.
    if (!existsLists){
        return res.status(400).json({ success: false, errorMessage: "해당 게시물이 없습니다."});
    }
    
    // 있을 때

    if (Number(password) !== Number(existsLists.password)){

        return res.status(400).json({ success: false, errorMessage: "비밀번호가 틀립니다."});

        
        
    }
    
    await Lists.updateOne({title}, {$set: {data}});


    res.json({ success: true});
});

 

5. 게시글 삭제 API

 

// 게시글 삭제 API
// API를 호출할 때 입력된 비밀번호를 비교하여 동일할 때만 글이 삭제되게 하기



router.delete("/lists/:title", async (req, res) => {

    const { title } = req.params;
    const {data} = req.body;
    const { password } = req.body;

    const existsLists = await Lists.find({title});
    if (existsLists.length){

        if (Number(password) === Number(existsLists.password)){
            

            await Lists.deleteOne({ title });
        }else{

            return res.status(400).json({ success: false, errorMessage: "비밀번호가 틀립니다."});
        }
    }


    res.json({ success: true});
});

 

느낀점 : 

 

그동안 node.js나 spring 같은 런타임 플랫폼을 사용해서 웹개발을 해본적이 없었다.

처음으로 node.js를 사용해보니 생각보다 편리한 부분이 많았다

npm를 이용해서 많은 라이브러리를 가져와 조금만 수정해서 쓸 수 있었던 점도 정말 편했다. 자바스크립트 오픈소스 생태계가 언어중에서 가장 크다는데 새삼 조금(?)은 실감됐다. 

get, post, put, delete, patch 등 여러 메소드를 배워서 어느정도는 익숙해진 것 같고,  심화강의 수강해서 jwt나 다른 여러 기능도 탑재

한 완벽한 웹페이지를 만들어 보고 싶다 !!

또 알고리즘 공부도 꾸준히해서 개발하다가 막히는 부분이 없도록 해야겠다 ㅎㅎ 

 

 

 

Comments