상세 컨텐츠

본문 제목

[Node.js] Spart Store 2

projects/node.js

by 서울의볼 2024. 1. 23. 23:50

본문

제출 후 해설강의를 듣고 보완한 부분과 오후동안 추가로 구현한 부분을 적어보겠음

 

  • 직전 글에 "둘 중 하나의 값을 보여주는 거라 코린이의 킹리적 갓심으론 Boolean 타입으로 해도 될 것 같았지만 우선은 만만한 String타입으로 하여 구현하였음" 이런 언급을 한 적이 있음. 근데 킹갓제너럴튜터님은 mongoose schema의 enum을 사용하여 특정한 value 외의 값을 입력하면 에러가 나오도록 간단히 구성하셨음:
status: {
    type: String, // status 필드 추가
    enum: ["FOR_SALE", "SOLD_OUT"],
    default: "FOR_SALE", // 기본 값은 "FOR_SALE"
  }
  • 위와 같이 바꾸면 기존에 내가 변수로 선언했던 router파일 내 status는 불필요하다는 것을 알고 삭제했었는데, 그런 바람에 post만 안되는 불상사가 발생했었음(대충 status가 undefined라는 에러). 돌고돌아 결국 문제를 찾아 해결했으나 삽질에 시간 낭비가 5졌음
  • 근데 이렇게 하나 둘 고치다보니 문득 드는생각이 로컬디렉토리에서 뭔가 고칠 땐 서버를 끊고 다시 켜야 변경사항이 적용되었는데, pm2는 계속 켜져있어서 임의로 0번 서버를 다운시키고 restart시켜야 하는 것인가 의문이 듦.
    결론적으로 실험해본 결과 css같은 건 그냥 도메인 새로고침만 해도 적용됨. 기능적으로 수정이 발생한 건 restart해줘야 하는 것 같음
  • 언젠가 우분투 서버에서 ssh 접속이 끊긴 적이 있었는데 이러면 어떤 명령어를 써도 안먹히는게 당연하니 항상 주의할 것
  • 코드리뷰로 "PUT 함수에서 Object.assign 을 사용해서 하기보다는 변경할 데이터가 담긴 object 를 가지고 for 을 사용해서 해보면 조금 더 좋을 것 같습니다." 이와 같은 피드백을 받음. 아래와 같이 수정하였음(의의는 차차 업데이트 할 예정):
// 피드백 적용: for문 활용
    for (const [key, value] of Object.entries(validation)) {
      product[key] = value;
    }
    
// 기존
	Object.assign(product, validation);
  • styles.css에 적용했듯이, express.static 미들웨어 함수를 이용해 또 다른 정적 디렉토리(modal.js 모달용 스크립트)를 설정한 순서대로 검색할 수 있도록 하였음
  • ejs style and script 참고!
import express from "express";
import connect from "./schemas/index.js";
import spartRouter from "./routes/spart.router.js";
import errorHandler from "./middlewares/error-handler.js";
import Spart from "./schemas/spart.schemas.js";

const app = express();
const PORT = 3000;

connect();

// ejs endeavor
app.set("view engine", "ejs");
app.set("views", "./views");

app.use(express.json());
app.use(express.urlencoded({ extended: true }));

// ejs style and script
app.use(express.static("./style"));
app.use(express.static("./public"));

app.use((req, res, next) => {
  console.log("Request URL:", req.originalUrl, "-", new Date());
  next();
});

const router = express.Router();

// ejs 상품목록조회
app.get("/", async (req, res) => {
  const products = await Spart.find()
    .select("name thumbnailUrl price seller status createdAt")
    .sort("-createdAt")
    .exec();

  res.render("index", { post: products });
});

// ejs 상품등록은 modal.js에서 바로 해당 경로로 fetch할 수 있음

app.use("/api", [router, spartRouter]);

app.use(errorHandler);

app.listen(PORT, () => {
  console.log(PORT, "포트로 서버가 열렸어요!");
});
  • 이로써 구현된 화면은 아래와 같음 (CRUD에서 CR정도 했다고 볼 수 있음)

메인화면: 상품 목록 조회 api

 

상품 클릭시 상품 상세 조회 api
상품 등록 api

다 정상 작동됨...

관련글 더보기