ExpressJS

frookie·2023년 4월 11일
0

ExpressJS

목록 보기
4/4

express node js로 backend 구현하기

기본 설치 및 세팅

npm init

{
  "name": "review-back",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  --- Enter 키로 넘기기
  "author": "본인 이름",
  "license": "MIT"
}

npm i express || npm install express --save

npm i -D nodemon	▶노드몬 설치: 변경사항마다 node **.js 치지 않고 자동 변경 해줌
//삭제하고 싶다면 npm rm -rf nodemon
  • package.json
"scripts": {
    "dev": "nodemon app.js"		▶변경 적용, 이후 터미널에서 "npm run dev" 로 실행
  },

-express js는 import를 쓰는 ES6 문법 대신 common js 문법 사용

  • app.js
const express = require("express");

const app = express();const 파일명

const port = 3010;		▶port 숫자는 본인이 설정

app.get("/", (req, res) => {		▶req = request 클라이언트 -> 서버
  res.send("Hello, Express");		  res = response 서버 -> 클라이언트
});

// 서버 시작 명령어 listen(포트번호, 콜백함수=처리 내용)
app.listen(port, () => {
  console.log(`Server listening on port: ${port}`);
});

ExpressJS Routing

routes 폴더 내에 모듈을 만들어 효율적으로 API 관리
ex) a 모듈을 만들어 app.js와 연결

  • app.js
const express = require("express");
const aRouter = require("./routes/a");const 모듈명Router

const app = express();

const port = 3010;

app.use("/a", aRouter);.use() = Middleware 미들웨어
//app.use("/추가할 경로", 모듈명Router);

app.get("/", (req, res) => {
  res.send("Hello, Express");
});

app.listen(port, () => {
  console.log(`Server listening on port: ${port}`);
});
  • a.js
const express = require("express");

const router = express.Router();

router.get("/", (req, res) => {
  res.send("데이터 조회, 불러오기");
});

router.post("/", (req, res) => {
  res.send("데이터 생성");
});

router.put("/", (req, res) => {
  res.send("데이터 수정, 업데이트");
});

router.delete("/", (req, res) => {
  res.send("데이터 삭제");
});

module.exports = router;

Todo 리스트

GoalsCRUDHTTP MethodREST API
투두 생성CreatePOST/
전체 리스트ReadGET/
특정 리스트/:id
수정UpdatePUT/:id
완료 여부/done/:id
삭제DeleteDELETE/:id
  • app.js
const express = require("express");
const todoRouter = require("./routes/todo");

const app = express();

const port = 3010;

app.use(express.json());		▶json데이터 불러오기, 반드시 todo 모듈보다 위에 적용
app.use("/todo", todoRouter);

app.get("/", (req, res) => {
  res.send("Hello, Express");
});

app.listen(port, () => {
  console.log(`Server listening on port: ${port}`);
});

todo 라우팅 해주고 json 파일도 따로 불러오기

  • todo.js

1. Todo 전체 및 특정 리스트 조회

const express = require("express");
let todoData = require("../todoData.json");JSON 데이터 삽입
const router = express.Router();

//전체 Todo 조회
router.get("/", (req, res) => {
  res.json(todoData);
});

//특정 Todo 조회
router.get("/:id", (req, res) => {
  const { id } = req.params;

  if (parseInt(id) >= todoData.length) {
    return res.status(400).json({ error: "존재하지 않는 ID입니다." });
  }

  res.json(todoData[parseInt(id)]);
});

2. Todo 리스트 생성

//Todo 생성
router.post("/", (req, res) => {
  const { title, desc } = req.body;
  
  //만약 res가 2개라면 위에 것만 실행됨, 그래서 return을 추가해줘야 아래 push가 일어나지 않음
  if (!title || !desc) {
    return res.status(400).json({ error: "타이틀과 설명을 입력하셔야 합니다" });
  }

  todoData.push({ title, desc, isDone: false });

  res.json(todoData);
});

3. Todo 리스트 내용 수정

//Todo 수정
//기존 id의 내용을 body에 적은 내용으로 수정해주기
router.put("/:id", (req, res) => {
  const { id } = req.params;
  const { title, desc } = req.body;

  if (parseInt(id) >= todoData.length) {
    return res.status(400).json({ error: "존재하지 않는 ID입니다." });
  }

  if (!title && !desc) {
    res
      .status(400)
      .json({ error: "타이틀이나 설명 중에 하나의 값은 입력해야 합니다." });
  }

  //title 이나 desc 둘 중 하나라도 수정하고 싶은 경우를 위해 삼항연산자 설정,
  //수정할 내용이 있다면 수정한 내용, 없다면 기존 내용
  todoData[parseInt(id)] = {
    title: title ? title : todoData[parseInt(id)].title,
    desc: desc ? desc : todoData[parseInt(id)].desc,
    isDone: todoData[parseInt(id)].isdone,
  };

  res.json(todoData);
});

4. Todo 리스트 체크

// //Todo 체크
router.put("/done/:id", (req, res) => {
  const { id } = req.params;
  // id값 확인
  // console.log(req.params);

  //   예외처리: 배열보다 긴 id의 done을 처리한다면 에러
  if (parseInt(id) >= todoData.length) {
    res.status(400).json({ error: "존재하지 않는 ID입니다." });
  }

  todoData[parseInt(id)] = {
    title: todoData[parseInt(id)].title,
    desc: todoData[parseInt(id)].desc,
    isDone: !todoData[parseInt(id)].isDone,
  };

  res.json(todoData);
});

5. Todo 리스트 삭제

//Todo 삭제
router.delete("/:id", (req, res) => {
  //제거하려면 filter필요

  const { id } = req.params;

  //   예외처리: 배열보다 id 길이가 길면 안되게 처리
  if (parseInt(id) >= todoData.length) {
    res.status(400).json({ error: "존재하지 않는 ID입니다." });
  }

  //filter로 id와 i가 같지 않으면 return, 같으면 삭제
  todoData = todoData.filter((v, i) => {
    return parseInt(id) !== i;
  });

  res.json(todoData);
});

module.exports = router;
profile
비전공자의 코딩, 블록체인 공부 일지

0개의 댓글