강의

멘토링

커뮤니티

Inflearn コミュニティ Q&A

taesun420 のプロフィール画像
taesun420

投稿した質問数

ちゃんと学ぶ Express.js: Part1 基礎から応用まで [基礎編]

Memos Route - 新規メモ作成APIの実装

강의랑 강의 자료랑 내용이 다른 것 같아요

作成

·

16

0

강의자료에서는 강의랑은 달리 ejs 코드도 나와있지 않고
https://github.com/comelulu/NCS-ExpressJS-Part1/tree/main/44_memos-route-2-create

자료에는 /add라는 라우트도 안 적혀있습니다.

node.jsrest-apiroutingbackendexpress.js

回答 1

1

nhcodingstudio님의 프로필 이미지
nhcodingstudio
インストラクター

안녕하세요 TAESUN님, 먼저 강의 수강 중 자료와 영상 내용이 달라 혼란을 드려 대단히 죄송합니다.

말씀해주신 대로 강의 영상에서는 폼을 입력받는 화면(ejs)과 이를 보여주는 라우트(/add)를 다루고 있는데, 제공해 드린 깃허브 링크와 텍스트 자료에는 해당 부분이 누락되어 있는 것을 확인했습니다. 꼼꼼하게 확인해주신 덕분에 빠르게 파악할 수 있었습니다. 정말 감사합니다.

누락된 새 메모 작성 폼 라우트(GET /add)와 EJS 뷰 파일(views/new-memo.ejs) 코드를 아래와 같이 정리해 드립니다. 이 코드를 기존 프로젝트에 추가하시면 정상적으로 실습하실 수 있습니다.


1. routes/memos.js 수정 (GET 라우트 추가)

기존 코드에 router.get("/add", ...) 부분이 추가되어야 합니다. 이 코드가 있어야 사용자가 메모를 입력할 수 있는 화면(HTML 폼)을 볼 수 있습니다.

const express = require("express");
const { v4: uuidv4 } = require("uuid");
const fs = require("fs");
const path = require("path");

const DATA_FILE = path.join(__dirname, "..", "data", "memos.json");
const router = express.Router();

// [추가된 부분] 새 메모 작성 폼 페이지 렌더링 (GET /memos/add)
router.get("/add", (req, res) => {
  res.render("new-memo"); // views/new-memo.ejs 파일을 찾아서 응답
});

// 새 메모 작성 API (POST /memos)
router.post("/", (req, res) => {
  const { title, content, userId } = req.body;
  const memos = JSON.parse(fs.readFileSync(DATA_FILE));

  const newMemo = {
    id: uuidv4(),
    title,
    content,
    userId,
  };

  memos.push(newMemo);
  fs.writeFileSync(DATA_FILE, JSON.stringify(memos, null, 2));

  // 성공 시 목록 페이지나 상세 페이지로 리다이렉트하는 것이 일반적이나,
  // API 테스트 중이라면 JSON 응답을 유지해도 됩니다.
  res.status(201).json(newMemo); 
});

module.exports = router;

2. views/new-memo.ejs 생성 (누락된 파일)

views 폴더 안에 new-memo.ejs 파일을 새로 만드시고 아래 코드를 작성해 주세요.

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>새 메모 작성</title>
</head>
<body>
    <h1>새 메모 작성하기</h1>
    <form action="/memos" method="POST">
        <div>
            <label for="title">제목:</label>
            <input type="text" id="title" name="title" required>
        </div>
        <div>
            <label for="content">내용:</label>
            <textarea id="content" name="content" required></textarea>
        </div>
        <div>
            <label for="userId">작성자 ID:</label>
            <input type="text" id="userId" name="userId" placeholder="UUID 입력" required>
        </div>
        <button type="submit">메모 저장</button>
    </form>

    <a href="/memos">목록으로 돌아가기</a>
</body>
</html>

3. 참고 사항 (index.js)

EJS 템플릿을 사용하기 위해서는 index.js에 뷰 엔진 설정이 되어 있어야 합니다. 만약 설정되어 있지 않다면 아래 코드를 app.use 부분 윗줄에 추가해 주세요.

// index.js
app.set("view engine", "ejs"); // 뷰 엔진을 ejs로 설정
app.set("views", path.join(__dirname, "views")); // 뷰 파일 경로 설정

학습 흐름이 끊기게 해 드려 다시 한번 죄송한 마음을 전합니다. 해당 내용은 강의 자료에도 즉시 업데이트하여 다른 분들도 혼란을 겪지 않도록 조치하겠습니다.

실습하시면서 추가로 궁금한 점이나 잘 안되는 부분이 있다면 언제든 편하게 질문 남겨주세요!

TAESUN님의 프로필 이미지
TAESUN
質問者

언제나 상세한 답변 감사드립니다:)

taesun420 のプロフィール画像
taesun420

投稿した質問数

質問する