본문 바로가기
TIL/디지털트윈

06.09 디지털 트윈 부트캠프 39일차

by saramnim 2023. 6. 9.
728x90
총 복습

백엔드

백엔드에서 가볍게 데이터 다루는 법을 다시 알아보자!

먼저 초기에 `npm init`을 통해 package.json 파일을 생성해준다.

그 다음 `npm i` 혹은 `npm install`을 해주면 pacakge-lock.json 파일도 생성된다.express 환경에서 nodejs를 다루기 위해 `npm i express`를 해주면 위의 json 파일들에 express 관련 코드들이 추가된다.

 

const express = require('express');
const app = express();
const fs = require("fs");
const bodyParser = require("body-parser");

app.use(bodyParser.json()) // 미들웨어 등록

const server = app.listen(8081, function () {
    const host = server.address().address
    const port = server.address().port
    console.log("Example app listening at http://%s:%s", host, port);
})

app.js 파일을 생성해 위와 같이 작성한다.

이로써 초기 import는 완성됐다.

 

app.js에서 사용할 mock-data인 user.json을 생성해주자.

{
  "user1": {
    "name": "mahesh",
    "password": "password1",
    "profession": "teacher",
    "id": 1
  },
  "user2": {
    "name": "suresh",
    "password": "password2",
    "profession": "librarian",
    "id": 2
  },
  "user3": {
    "name": "ramesh",
    "password": "password3",
    "profession": "clerk",
    "id": 3
  }
}

 

get

위와 같이 완성된 json 파일에서 해당 객체 목록을 불러오려면?

정답은 get을 써야 한다.

app.get('/listUsers', function (req, res) {
    fs.readFile(__dirname + "/" + "user.json", 'utf8', function (err, data) {
        console.log(data);
        res.end(data);
    });
})

localhost:8081 뒤에 /listUsers를 써주면 

화면에 위와 같이 나타난다.

이는 포스트맨에서도 똑같이 나타나는 사항으로 자세한 사항은 다음 post 기능에서 알아보자.

 

post

객체 목록에 또 다른 객ㅊ체를 추가하려면?

post를 써야한다.

app.post('/addUser', function (req, res) {
    console.log(req.body);
    fs.readFile(__dirname + "/" + "user.json", 'utf8', function (err, data) {
        data = JSON.parse(data);
        data["user4"] = user["user4"];
        console.log(data);
        res.end(JSON.stringify(data));
    });
})

이렇게 작성한 후 포스트맨에서 

request를 post로 바꾼 뒤, Body - raw - JSON 에 위와 같이 작성해 주거나

 

VSC app.js 파일 내에서

const user = {
    "user4": {
        "name": "mohit",
        "password": "password4",
        "profession": "teacher",
        "id": 4
    }
}

위와 같이 작성해주면 user4에 대한 정보가 추가 된다.

 

delete

다음으로 delete 기능을 만들어보자

app.delete('/deleteUser', function (req, res) {
    fs.readFile(__dirname + "/" + "user .json", 'utf8', function (err, data) {
        data = JSON.parse(data);
        delete data["user" + 2];
        console.log(data);
        res.end(JSON.stringify(data));
    });
})

요렇게 작성해주면  delete 기능이 완성됐다.

 

삭제하고 싶은 id를 입력해주면 해당 user가 삭제 된다.

예를 들어 id가 2인 user를 삭제하고 싶다면 vsc에서

const id = 2;

이렇게 입력해주거나 경로에 

이런 식으로 지우고 싶은 id를 입력해주면 된다.

참고로 위의 방법을 사용하려면, 

app.delete("/users/:id", (req, res) => {
    const id = req.params.id;
    res.json({ message: "유저 삭제 완료." });
});

요런 식으로 작성해주면 되는데 자세한 사항은 나중에 서술!

 

위에는 이렇게 썼지만 내가 최종적으로 완성한 코드는 다음과 같다.

const express = require("express");
const fs = require("fs");
const app = express();
app.use(express.json());

let users = {};

const loadUsers = () => {
    try {
        const data = fs.readFileSync("user.json", "utf8");
        users = JSON.parse(data);
    } catch (err) {
        console.error("Error reading user.json:", err);
    }
}

const saveUsers = () => {
    try {
        const data = JSON.stringify(users, null, 2);
        fs.writeFileSync("user.json", data, "utf8");
    } catch (err) {
        console.error("Error writing to user.json:", err);
    }
}

loadUsers();

app.get("/users", (req, res) => {
    res.json(users);
});


app.get("/users/:id", (req, res) => {
  const id = req.params.id;
  if (!users[`user${id}`]) {
    return res.status(404).json({ error: "유저 없음." });
  }
  const userInfo = users[`user${id}`];
  res.json(userInfo);
});

app.post("/users", (req, res) => {
    const { id, password } = req.body;
    if (!id || !password) {
        return res.status(400).json({ error: "ID와 password를 입력하세요." });
    } //없으면 입력하라고 경고
    if (users[`user${id}`]) {
        return res.status(409).json({ error: "같은 ID를 가진 사용자가 존재합니다." });
    } 
    const newUser = {
        name: req.body.name,
        password,
        profession: req.body.profession,
        id: parseInt(id),
    };
    users[`user${id}`] = newUser;
    saveUsers();
    res.status(201).json({ message: "유저 등록 완료." });
});

app.delete("/users/:id", (req, res) => {
    const id = req.params.id;
    if (!users[`user${id}`]) {
        return res.status(404).json({ error: "유저 없음." });
    }
    delete users[`user${id}`];
    saveUsers();
    res.json({ message: "유저 삭제 완료." });
});

app.listen(8081, () => {
    console.log("Server running on port 8081");
});

 

728x90
반응형

댓글

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."