Backend ๐Ÿ“š/Node.js

[Node]Instagram Clone - 9. ํŠน์ • ํšŒ์› ์กฐํšŒ API

leejaejae 2024. 11. 5. 13:03
  • ํŠน์ • ์‚ฌ์šฉ์ž๋ฅผ ๋‹‰๋„ค์ž„์œผ๋กœ ์กฐํšŒ
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ user_id๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด๋‹น ์‚ฌ์šฉ์ž๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ , ๊ทธ ์‚ฌ์šฉ์ž์˜ ๊ฒŒ์‹œ๋ฌผ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต

1. ์ฝ”๋“œ

const express = require("express");
const router = express.Router();
router.use(express.json());

const { auth } = require("../auth");
const cookieParser = require("cookie-parser");
router.use(cookieParser());

const { User } = require("../../models/User");
const { Post } = require("../../models/Post");

// ๋‹‰๋„ค์ž„์œผ๋กœ ์‚ฌ์šฉ์ž ๊ฒ€์ƒ‰
router.get("/", auth, async (req, res) => {
  const { user_id } = req.query;
  if (!user_id) {
    return res.status(400).json({ message: "user_id๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”." });
  }

  try {
    // user_id๊ฐ€ ์ฃผ์–ด์ง„ ์ž…๋ ฅ๊ณผ ์ผ์น˜ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ฐพ๊ธฐ (๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„X)
    const user = await User.findOne({
      user_id: { $regex: user_id, $options: "i" },
    });
    if (!user) {
      return res.status(404).json({ message: "์‚ฌ์šฉ์ž๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค." });
    }

    // ์‚ฌ์šฉ์ž์˜ ๊ฒŒ์‹œ๋ฌผ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ
    const posts = await Post.find({ user: user._id }) // user ํ•„๋“œ๊ฐ€ ์‚ฌ์šฉ์ž์˜ ID์™€ ์ผ์น˜ํ•˜๋Š” ๊ฒŒ์‹œ๋ฌผ ์ฐพ๊ธฐ
      .select("text images createdAt"); // ํ•„์š”ํ•œ ํ•„๋“œ๋งŒ
    // .populate("comments"); // ๋Œ“๊ธ€ ์ •๋ณด

    // ์‚ฌ์šฉ์ž ์ •๋ณด์™€ ๊ฒŒ์‹œ๋ฌผ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๋ฐ˜ํ™˜
    res.status(200).json({
      userName: user.user_id, // ์‚ฌ์šฉ์ž ์ด๋ฆ„(user_id)
      posts: posts, // ์‚ฌ์šฉ์ž์˜ ๊ฒŒ์‹œ๋ฌผ ๋ฐฐ์—ด
    });
  } catch (error) {
    console.error("Error occurred:", error);
    res
      .status(500)
      .json({ message: "์„œ๋ฒ„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.", error: error.message });
  }
});

module.exports = router;

 

2. ์ฝ”๋“œ ์„ค๋ช…

 

  • ์‚ฌ์šฉ์ž ๊ฒ€์ƒ‰: ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ(๊ตฌํ˜„ ์˜ˆ์ •, ํ˜„์žฌ๋Š” postman ์‚ฌ์šฉ) user_id๋ฅผ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์Œ.
    • user_id๊ฐ€ ์ œ๊ณต๋˜์ง€ ์•Š์œผ๋ฉด 400 ์ƒํƒœ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜.
  • ์‚ฌ์šฉ์ž ์ •๋ณด ์กฐํšŒ: User ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  user_id์— ํ•ด๋‹นํ•˜๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์ฐพ์Œ.
    • ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์œผ๋ฉด 404 ์ƒํƒœ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ์ž ์—†์Œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜.
  • ๊ฒŒ์‹œ๋ฌผ ์ •๋ณด ์กฐํšŒ: ์‚ฌ์šฉ์ž๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ, ํ•ด๋‹น ์‚ฌ์šฉ์ž์˜ ๊ฒŒ์‹œ๋ฌผ์„ ์กฐํšŒ.
  • ์‘๋‹ต ๋ฐ˜ํ™˜: ์‚ฌ์šฉ์ž ์ •๋ณด์™€ ๊ทธ ์‚ฌ์šฉ์ž์˜ ๊ฒŒ์‹œ๋ฌผ์„ JSON ํ˜•์‹์œผ๋กœ ๋ฐ˜ํ™˜.

 

3. ๊ฒฐ๊ณผ ๐ŸŽ‰