--- tags: Node.js 直播班 - 2023 春季班 --- # 🏅 Day 34 - 取得按讚貼文列表 ## 題目 實作[此頁面](https://xd.adobe.com/view/c0763dbe-fc15-42e8-be0b-8956ed03e675-9525/screen/f4bf7d1f-0681-4645-a07c-c5ac3cd38065/)的取得使用者按讚貼文列表功能 **流程** 當使用者按讚,將按讚的使用者 ID 存到該則貼文資料 likes 陣列中,在使用者的個人頁面可以嘗試取得貼文資料中 likes 欄位含有該使用者 ID 的貼文 **實作前準備** - 請先在貼文 posts 的 schema 中,將 likes 欄位改為以陣列呈現,陣列中的內容, type 型別更改為 `mongoose.Schema.ObjectId` 並且需來自 `User` Model 的 ObjectId ```javascript likes: [ { type: mongoose.Schema.ObjectId, ref: 'User' } ], ``` - 預先新增一些測試的貼文資料以及註冊新增使用者資料,在 MongoDB Compass 將已註冊的使用者 ID 加入貼文的 likes 欄位中 :::spoiler 如圖 ![](https://i.imgur.com/OWLguRc.png) ::: -- **開始實作** - 設計一個 GET `/users/getLikeList` 路由,需登入才能請求貼文資料 - 當使用者登入並驗證 JWT 正確,尋找資料庫中 likes 欄位包含該使用者 ID 的貼文 - 找出的貼文需顯示使用者的`name`及 `_id` - 回傳成功訊息及貼文資料 **將程式碼片段貼至 HackMD 並回報** ## 回報流程 將答案連結貼至底下回報就算完成了喔! 解答位置請參考下圖(需打開程式碼的部分觀看) ![](https://i.imgur.com/vftL5i0.png) <!-- 解答: 範例參考 https://github.com/gonsakon/express-week4-sample/blob/week8/routes/users.js#L76-L88 ```javascript= // routes/users.js const router = express.Router(); const Post = require('../models/postsModel'); const { isAuth } = require('../service/auth'); router.get('/getLikeList', isAuth, handleErrorAsync(async(req, res, next) =>{ const likeList = await Post.find({ likes: { $in: [req.user.id] } }).populate({ path:"user", select:"name _id" }); res.status(200).json({ status: 'success', likeList }); })) ``` --> 回報區 --- | 報數 | 組別/Discord 名字 | Codepen/HackMD/其他回饋 | |:----:|:-----------------------:|:-------------------------------------------------------------------------:| | 1 | 中 4 組 / jimkk159 | [HackMD - Day 34](https://hackmd.io/KfGNUldHQdWtMcSWbjWPuA) |