-
[Node.js] JSON 직렬화와 Map 객체JavaScript 2024. 1. 8. 22:12반응형
<링크>
https://github.com/heeheehoho/DevCourse/blob/main/backend/NodeBase/demo-api/blogger-demo.js
<오류난 부분>
app.get("/bloggers", function (req, res) { res.json(db); });
res.json(db)로 하면 안되는 이유?
- "db"가 Map 객체이기 때문. Express의 res.json() 메소드는 JavaScript 객체나 배열을 JSON 형식의 문자열로 변환하여 클라이언트에게 응답으로 보내는데, Map 객체는 기본적으로 JSON으로 직렬화(Serialization)되지 않음.JSON 직렬화와 Map 객체
- 직렬화 불가: JavaScript의 Map 객체는 키-값 쌍을 저장하는 구조이다. 하지만, 이 구조는 기본적으로 JSON 형식으로 직렬화할 수 없다. JSON.stringify 메소드를 사용해도 Map 객체는 빈 객체 {}로 직렬화 됨
- 배열 변환 필요: Map 객체의 내용을 JSON으로 전송하려면, 먼저 Map의 키-값 쌍을 배열이나 일반 객체로 변환해야 함. 예를 들어 Array.from(db.entries())를 사용하면 Map의 각 항목을 배열로 변환할 수 있음
<수정>
app.get("/bloggers", function (req, res) { const bloggers = Array.from(db.values()); res.json(bloggers); });
<전체 코드>
/* object-api-demo.js 파일 참고 */ //express 모듈 세팅 const express = require('express') const app = express() // JSON 형식의 요청 본문을 파싱하기 위한 미들웨어 app.use(express.json()) // 데이터 세팅 let blogger1 = { blogName: "jungheeho", view: "1104명", descrpition: "열공티비" } let blogger2 = { blogName: "suddiyo", view: "4946명", descrpition: "꾸준히 기록하고 성장하는 백엔드 개발자" } let blogger3 = { blogName: "third", view: "3333명", descrpition: "hello" } let db = new Map() //map 객체인 db로 데이터 저장라는 데이터베이스 역할(id를 키로) / key-value형식 var id = 1 db.set(id++, blogger1) db.set(id++, blogger2) db.set(id++, blogger3) // REST API 설계 app.get("/bloggers", function (req, res) { const bloggers = Array.from(db.values()); res.json(bloggers); }); app.get('/blogger/:id', function (req, res) { let { id } = req.params; id = parseInt(id); const blogger = db.get(id); if (blogger == undefined) { res.status(404).json({ message: "블로거를 찾을 수 없음" }); } else { res.json(blogger); } }); app.post('/blogger', function (req, res) { const newBlogger = req.body; db.set(id++, newBlogger); res.json({ message: `${newBlogger.blogName} 블로거 생활을 환영합니다!` }); }); app.listen(3000, () => { console.log("서버가 3000번 포트에서 시작되었습니다."); });
<전체 코드>
반응형'JavaScript' 카테고리의 다른 글
[Node.js] blogger-demo파일 리팩토링 | Refactoring (2) 2024.01.09 [Node.js]Express.js 기반 웹 서버 구축 연습 | REST API (0) 2023.12.25 [TIL] 2023.12.16 | 웹 풀사이클 데브코스 (30) 2023.12.17 [Node.js] Url에 따라 프론트엔드에 다른 response 보내기 | new URL (2) 2023.12.17 [Node.js] URL parsing | TypeError: handle[pathname] is not a function | favicon.ico에러 (0) 2023.12.17