총 복습
백엔드
백엔드에서 가볍게 데이터 다루는 법을 다시 알아보자!
먼저 초기에 `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");
});
'TIL > 디지털트윈' 카테고리의 다른 글
07.04 디지털 트윈 부트캠프(OT) 2일차 (0) | 2023.07.04 |
---|---|
07.03 디지털 트윈 부트캠프(OT) 1일차 (0) | 2023.07.03 |
06.08 디지털 트윈 부트캠프 38일차 (1) | 2023.06.08 |
06.07 디지털 트윈 부트캠프 37일차 (0) | 2023.06.07 |
06.05 디지털 트윈 부트캠프 36일차 - 백엔드 특강 (0) | 2023.06.05 |
댓글